{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "toc": true
   },
   "source": [
    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
    "<div class=\"toc\" style=\"margin-top: 1em;\"><ul class=\"toc-item\"></ul></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# AutoEncoders <a class=\"tocSkip\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NumPy:1.13.1\n",
      "Matplotlib:2.1.0\n",
      "TensorFlow:1.4.1\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Keras:2.0.9\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "import numpy as np\n",
    "np.random.seed(123)\n",
    "print(\"NumPy:{}\".format(np.__version__))\n",
    "\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.pylab import rcParams\n",
    "rcParams['figure.figsize']=15,10\n",
    "print(\"Matplotlib:{}\".format(mpl.__version__))\n",
    "\n",
    "import tensorflow as tf\n",
    "tf.set_random_seed(123)\n",
    "print(\"TensorFlow:{}\".format(tf.__version__))\n",
    "\n",
    "import keras\n",
    "print(\"Keras:{}\".format(keras.__version__))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "DATASETSLIB_HOME = '../datasetslib'\n",
    "import sys\n",
    "if not DATASETSLIB_HOME in sys.path:\n",
    "    sys.path.append(DATASETSLIB_HOME)\n",
    "%reload_ext autoreload\n",
    "%autoreload 2\n",
    "import datasetslib\n",
    "\n",
    "datasetslib.datasets_root = os.path.join(os.path.expanduser('~'),'datasets')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Get the MNIST data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting /home/armando/datasets/mnist/train-images-idx3-ubyte.gz\n",
      "Extracting /home/armando/datasets/mnist/train-labels-idx1-ubyte.gz\n",
      "Extracting /home/armando/datasets/mnist/t10k-images-idx3-ubyte.gz\n",
      "Extracting /home/armando/datasets/mnist/t10k-labels-idx1-ubyte.gz\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "dataset_home = os.path.join(datasetslib.datasets_root,'mnist') \n",
    "mnist = input_data.read_data_sets(dataset_home,one_hot=False)\n",
    "\n",
    "X_train = mnist.train.images\n",
    "X_test = mnist.test.images\n",
    "Y_train = mnist.train.labels\n",
    "Y_test = mnist.test.labels\n",
    "\n",
    "pixel_size = 28 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get four distinct images and labels from train and test data\n",
    "while True:\n",
    "    train_images,train_labels = mnist.train.next_batch(4)\n",
    "    if len(set(train_labels))==4:\n",
    "        break\n",
    "while True:\n",
    "    test_images,test_labels = mnist.test.next_batch(4)\n",
    "    if len(set(test_labels))==4:\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import random\n",
    "\n",
    "# Function to display the images and labels\n",
    "# images should be in NHW or NHWC format\n",
    "def display_images(images, labels, count=0, one_hot=False):\n",
    "    # if number of images to display is not provided, then display all the images\n",
    "    if (count==0):\n",
    "        count = images.shape[0]\n",
    "        \n",
    "    idx_list = random.sample(range(len(labels)),count)\n",
    "    for i in range(count):\n",
    "        plt.subplot(4, 4, i+1)\n",
    "        plt.title(labels[i])\n",
    "        plt.imshow(images[i])\n",
    "        plt.axis('off')\n",
    "    plt.tight_layout()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Simple AutoEncoder in TensorFlow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hyperparameters\n",
    "learning_rate = 0.001\n",
    "n_epochs = 20\n",
    "batch_size = 100\n",
    "n_batches = int(mnist.train.num_examples/batch_size)\n",
    "\n",
    "# number of pixels in the MNIST image as number of inputs\n",
    "n_inputs = 784\n",
    "n_outputs = n_inputs\n",
    "\n",
    "# input images\n",
    "x = tf.placeholder(dtype=tf.float32, name=\"x\", shape=[None, n_inputs]) \n",
    "# output images\n",
    "y = tf.placeholder(dtype=tf.float32, name=\"y\", shape=[None, n_outputs]) \n",
    "\n",
    "# number of hidden layers\n",
    "n_layers = 2\n",
    "# neurons in each hidden layer\n",
    "n_neurons = [512,256]\n",
    "# add decoder layers:\n",
    "n_neurons.extend(list(reversed(n_neurons)))\n",
    "n_layers = n_layers * 2\n",
    "\n",
    "# definew and b parameters\n",
    "w=[]\n",
    "b=[]\n",
    "\n",
    "for i in range(n_layers):\n",
    "    w.append(tf.Variable(tf.random_normal([n_inputs if i==0 else n_neurons[i-1],\n",
    "                                           n_neurons[i]]),\n",
    "                         name=\"w_{0:04d}\".format(i) \n",
    "                        )\n",
    "            ) \n",
    "    b.append(tf.Variable(tf.zeros([n_neurons[i]]),\n",
    "                         name=\"b_{0:04d}\".format(i) \n",
    "                        )\n",
    "            )                   \n",
    "w.append(tf.Variable(tf.random_normal([n_neurons[n_layers-1] if n_layers > 0 else n_inputs,\n",
    "                                       n_outputs]),\n",
    "                     name=\"w_out\"\n",
    "                    )\n",
    "        )\n",
    "b.append(tf.Variable(tf.zeros([n_outputs]),name=\"b_out\"))\n",
    "\n",
    "# x is input layer\n",
    "layer = x\n",
    "\n",
    "# add hidden layers\n",
    "for i in range(n_layers):\n",
    "    layer = tf.nn.sigmoid(tf.matmul(layer, w[i]) + b[i]) \n",
    "\n",
    "# add output layer\n",
    "layer = tf.nn.sigmoid(tf.matmul(layer, w[n_layers]) + b[n_layers])\n",
    "    \n",
    "model = layer\n",
    "\n",
    "mse = tf.losses.mean_squared_error\n",
    "loss = mse(predictions=model, labels=y)\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
    "optimizer = optimizer.minimize(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0000   loss = 0.156697\n",
      "epoch: 0009   loss = 0.091331\n",
      "epoch: 0019   loss = 0.078746\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as tfs:\n",
    "    tf.global_variables_initializer().run()\n",
    "    for epoch in range(n_epochs):\n",
    "        epoch_loss = 0.0\n",
    "        for batch in range(n_batches):\n",
    "            X_batch, _ = mnist.train.next_batch(batch_size)\n",
    "            feed_dict={x: X_batch,y: X_batch}\n",
    "            _,batch_loss = tfs.run([optimizer,loss], feed_dict)\n",
    "            epoch_loss += batch_loss \n",
    "        if (epoch%10==9) or (epoch==0):\n",
    "            average_loss = epoch_loss / n_batches\n",
    "            print('epoch: {0:04d}   loss = {1:0.6f}'\n",
    "                  .format(epoch,\n",
    "                          average_loss))\n",
    "\n",
    "    # predict images using trained autoencoder model            \n",
    "    Y_train_pred = tfs.run(model, feed_dict={x: train_images})\n",
    "    Y_test_pred = tfs.run(model, feed_dict={x: test_images})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb8005e080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb8005e198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(train_images.reshape(-1,pixel_size,pixel_size),train_labels)\n",
    "display_images(Y_train_pred.reshape(-1,pixel_size,pixel_size),train_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAADFCAYAAABJo5HtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFTVJREFUeJzt3Xm0nWWVJ+D3vQMJSBJMIIQQkhhI\nSBAobIYSygkBBUSUtgDRRqpb0AYFghq7urDFXqWtArVQ5sGUYmGXQsmMiAh2VQnYDBIFwhyCYUjQ\nMIUAGe79+g+oLnW/kRPufXPOvXmetfIHP959vk1Y59yzz7fuPrlpmgQAAAAMvq52NwAAAADDlaEb\nAAAAKjF0AwAAQCWGbgAAAKjE0A0AAACVGLoBAACgEkM3AAAAVGLo7iA55xE557k550dzzstyzvNy\nzvu1uy+g8+ScZ+Wcb8w5P5dzfijnfFC7ewI6T875opzzkznn53POD+Scj2x3T0DnyTm/8Ed/+nLO\nZ7S7r+HC0N1ZelJKi1JK70wpjUkpfSGldHHOeWobewI6TM65J6V0RUrp6pTS2JTSJ1JKF+WcZ7S1\nMaATfTWlNLVpmtEppQNTSl/OOe/c5p6ADtM0zcb/9ielNCGl9FJK6ZI2tzVsGLo7SNM0y5um+VLT\nNAubpulvmubqlNIjKSU/HIHfNzOlNDGldFrTNH1N09yYUroppXR4e9sCOk3TNPc0TbPi3/7x1T9b\nt7EloPN9KKX0VErpX9vdyHBh6O5gOefNU0ozUkr3tLsXoOPllNL27W4C6Dw557Nzzi+mlO5LKT2Z\nUvpRm1sCOtsRKaXvNk3TtLuR4cLQ3aFyzr0ppe+llC5smua+dvcDdJT70yufQM/JOffmnN+TXvm1\nlI3a2xbQiZqmOSalNCql9PaU0qUppRV/ugJYX+Wcp6RX3lNc2O5ehhNDdwfKOXellP4hpbQypfTp\nNrcDdJimaVallD6YUnpfSmlxSumzKaWLU0qPtbMvoHO9+qsoP08pTUopHd3ufoCOdXhK6edN0zzS\n7kaGk552N8AfyjnnlNLclNLmKaX9X31zDfAHmqb5dXrlk+iUUko555uTT6WB19aT/E43sGYfSyl9\nrd1NDDfudHeec1JKs1JK72+a5qV2NwN0ppzzjjnnkTnnjXLOn0spbZFS+k6b2wI6SM55fM75wznn\njXPO3Tnn96aUDksp3dDu3oDOk3PeI6W0ZbK1fNAZujvIq79D8cmU0k4ppcW/9z15H21za0DnOTy9\nshDpqZTSXimlfX5vQzFASq9sKj86vfKrJ8+klE5NKc1umubKtnYFdKojUkqXNk2zrN2NDDfZUjoA\nAACow51uAAAAqMTQDQAAAJUYugEAAKASQzcAAABUYugGAACASnrW5cX26TrYqnQG3fX9l+R298Dg\n8lpBDV4rhievF9Tg9WL48VpBDa2+VrjTDQAAAJUYugEAAKASQzcAAABUYugGAACASgzdAAAAUImh\nGwAAACoxdAMAAEAlhm4AAACoxNANAAAAlRi6AQAAoBJDNwAAAFRi6AYAAIBKDN0AAABQiaEbAAAA\nKjF0AwAAQCU97W5gffLQN95azM9//wUt1f/w6V2L+a3nviVk4+be0npjAAAAVOFONwAAAFRi6AYA\nAIBKDN0AAABQiaEbAAAAKrFIrZLu6dNCduUHTyuendk7oqXHfNfEm4v5L06M+X9621Ehm3xpd7F+\n5FW3tnR9AGCQdZV/NndtPz2Gjzweov5ly4r13bNifd+9D65db+tAz7Sp5X+xYmWIVj/+RN1mACpx\npxsAAAAqMXQDAABAJYZuAAAAqMTQDQAAAJUYugEAAKAS28sr6XtwQcjmvPfw4tlFHxgfsukHxA2j\nfzv5ymL9W0fE7ecPveeCkO096aBifbqqHAMAg2fJsXuEbMJBjxbPXrnt90J2whOx/t7nJhfr5874\ndsiOeOAjr9Xi/7fo9i1DNv72/pbrS57YM2bf3//M4tkzF+8VsiW7D+jyAG3jTjcAAABUYugGAACA\nSgzdAAAAUImhGwAAACqxSG0d6rv/oWI+8eSYLz85npuz3RHF+hWnvxyyK2ZeHLKfbndZsf5thx0T\nstH/+IviWQDg9Vk5JmZXbVteklpy2sSbYzixfLYrbRSyH88qvw8omlXIyvtgB6h8/+f4CT8N2d+k\n3Wo0AOu17k3iC9PqWVMH/TrLt9qwmPe8GBc0jli6Ip67d2Gxvu/Z5wbU17riTjcAAABUYugGAACA\nSgzdAAAAUImhGwAAACqxSG0I6Zv/QDHv2TtmJ92xR8hOnnB7sX7E830D6gtozbOH7x6yfT7785Cd\ntNm8AV3nE4veVcwXfDluRhp59a0DuhbQuslfjz+Hd+w5tnj25YmrQnbh3heE7NRF+xbr77pncqzf\n9/zXavFPGp3jcqM3bzCwt5LP9cdlsCmldNTXPxeyzdItA7oWrCsPfmfnkO0x4+Eq1+rKcRFZf9P6\nfdXpb3gqZH+9aVxk2LWGe7X9KV5/oErX2utTRxfPbnj50Hgf4043AAAAVGLoBgAAgEoM3QAAAFCJ\noRsAAAAqMXQDAABAJbaXDwPdm4wJ2bYbPRjP5fJnLM9O6w3Z5gNvC9YL3ePGhuzeU6YVz/7z3qeE\nbIvuDUN2/nNTi/X3LN8yZO8YfX+s3+r/FOvvPOPGkH2u51MhGyqbQGGoaVatDNnkL93ccv1X0k6F\ndHHx7IxCXq5v3cp9dw3ZT+aeO6DHfOfZc4r5pHNb/3uBTnP/PvGbAmps+U4ppdtXdIesby3uq27S\nFb9B4O6Vsf7lJhfr+1KcI0qm97xQzMd2j2ipfqhzpxsAAAAqMXQDAABAJYZuAAAAqMTQDQAAAJVY\npDYM9L9pUsg+PvpnIdvtzkOL9VvMnRcfc+BtwbDy8gG7FfP9vxqfa5eNvW4NjxKXhex01rEhm3rh\nwmL16sefCNmj094ZshOPnVCsn3/IGSE79bSzQvb5VccU60dcc1sxB4afFfvFpWkHnnLDgB5z2x/G\n15aZF8RlkCml1DegK0F77f6lT6+za4274JYB1fdsFeeI5qWXQtb3u6UtP2bXyJEhG3djzFJKae6U\n60N27YujQjbqjvgeKKWUVrfcVXu50w0AAACVGLoBAACgEkM3AAAAVGLoBgAAgEoM3QAAAFCJ7eXD\nwIMfixv+Sl5eVf7f3f/ii4PZDgxLU068r5jPHju/5cfY+fTjQzbp6zeHbG02ca5esLCQlreXl/zZ\nBjGbdOKDxbO/vablhwWGiFV771zMzznnmyHbpjd+A8OaHPrwviHb9sT4etm3bFnLjwlDxUA3iq9L\nqxc9NuiPuex9fxayy6ec2XL9Zy4/ImRbLxo6f6cl7nQDAABAJYZuAAAAqMTQDQAAAJUYugEAAKAS\ni9SGkKVH7l7Mb/nLU+PZ/niu58ebDHZLMCx1jxsbsu9OubF49nd9K0O25+lzime3PCUuTRuoUq+H\n7XlT8WxXi5+zfnvKDcX8gFReuAR0nq6RI0P2zId2Ctn5X/lGsX5tlqaVLD35TSEbuezWAT0mMDQ8\nfkBcCdvqe5CUUtp6ztBemlbiTjcAAABUYugGAACASgzdAAAAUImhGwAAACqxSG0IeeNhjxXzcV0b\nhuzN3/p0yKacO/hLnGA4WnDczJCtaq4vnv3i4r1CNrHCwrSUUurZcmK81qXPhWzHjX5TrN/x5r8K\n2bw9/j5kP3tp47VvDmiLFw7+82K++MC45PG+d59VONk7yB294tpzzwzZLufODtlWX/beBIayJ+bs\nEbLb9j4lZP1pg2L9XncdGrI3pAUDb6zDuNMNAAAAlRi6AQAAoBJDNwAAAFRi6AYAAIBKDN0AAABQ\nie3lHaq0CfCuWWcXz5702x1CtvUFj4Zs9cDbgvXCmIeals/u+IZFIZu/3/7FsyOuvS1k3aNHh+yR\n2dsX64//8BUh6yt8dvp3f/uRYv3mvyu8CsSXmnT0DR8r1s9IsX9g3Vl65O4hO+/EbxbP7rRBfIvX\nP+gdrVlv7g7ZTZ88NWS7bXdMsX7aR+YNek/A65d7y9vH9zj4zpCN6opnL3thfLF+9PHxfUzfWvY2\nFLjTDQAAAJUYugEAAKASQzcAAABUYugGAACASixS6wDPH/bWkP3LcXHZSF8zslh/3SlvD9mYx34x\n8MZgPbXJP9wSspM+85bi2ZPG3xGy/c87rXh23oq4ROQNXStC9raRNxTrv/XctJBd88HdQrbJA7H/\nlFJasd+uxfyP/cUODxbz37ZUDQyGRV8oLFQ9+szCyfJbuRVNXJx45fLNQ3bitYcW66dcvSpkvT+N\nr3d5l/Lix3TyMyG6ZturQjZ5/NPleqCjLDvoPxTz07c8o6X6r8zfr5hPvH/+6+5pKHGnGwAAACox\ndAMAAEAlhm4AAACoxNANAAAAlViktg51jx5dzD950qUhW970h2z3uZ8q1k+95Jcha9ayN+BPm7f3\npsV85lfi8/Kbe13U8uOecNchIeu5bpPi2c3OKS1Ie7jla5V0FT57/faU8iK3A9LOA7oW0Lq+EfEn\n+V0r43KzhavHFev/2w8OD9nUL8TXkG3SwBavNrffXcwffjIun+zfNv439Td5QNcH1o0Zn7mn5bN3\nr4zP9a2OWlI82/e6O3rFk5+NSyfH7ft48ez7t7grZNdtX57PBps73QAAAFCJoRsAAAAqMXQDAABA\nJYZuAAAAqMTQDQAAAJXYXl5Jz9TJIeu9cEXx7OGjFodsm2tnh2zGF0ubi20qh3Whb+nTxXzGf701\nZGelGS0/7hbp3tfd02DoT/GbEtake5s3hazvoUcGsx3gVVP/R/yZ/99/cETIul58uVy/oPyeYbDl\nXbYv5te/7YxCumFIfnP3FsX6bdKjA2kLhoSeKVsV81UTx4bsoQ/H509KKaU3rhzMltbousl/X8xX\nNfEe7o4bxHNX/OonLV+rN3cXrrOmPed3hOTaF0cVT57zlx8opOvmfZg73QAAAFCJoRsAAAAqMXQD\nAABAJYZuAAAAqMQitUrGf/+ZkH1rq38unr3khXEhm/W1pSFb0/oAgHVhweFx4dGUkyxSY2ib+5uf\nh+yKF2YVz159yF+ErP/u+wa9pzUpXav1VYgDl0eMCNkDxxU2JqWUJvXEpU8rmlUh633e/R/WD0/M\n2SNkJx75j8WzB238VMuP21W4h7o2S1JbVVqYNhjX+tCDB4ZsyQvlRWglvRfFpXNvvOmx4tn+Re1b\nXuuVDgAAACoxdAMAAEAlhm4AAACoxNANAAAAlVikNgie/i+7h+xHW53Vcv3f/PjQkE1/6BcD6glg\nsE07PS5xsuCRoW6L7o1C9okxC4tnR/3TSyGb+7n/GLKN5z1erF/9WDnvRN2zpofsvr+Oy43u3+uC\nlh9zh6uOC9mMk25eu8ZgCFhyXFya9sNPnxKyeSsmFuvf/P1jW77WJvfmkPWNjNnEK35TrG9G9Ibs\nkKtvCtlHRz1ZrP/Ckt1Cds9hW4csv/hysb5vcVwaN3ZV+VqtWj2g6jrc6QYAAIBKDN0AAABQiaEb\nAAAAKjF0AwAAQCWGbgAAAKjE9vK1sHh23ESYUkqXnBC3Eaa0YcuP+/l9rgrZyd/ZNx5cVv7fdekB\np7d8rZKPnn9CyCZ91TZRWB90rcVnr31Ln67YCXS+w0Ytidl554TsmMfeUay//cL4PmLChb8qnu1f\nvnwtu3ttL30gbhne6PjyRvXZky8P2Z4bxu3Dly0fW6z/n3cdELLtvhY3EnfilmEYqNnH/FPI3vuT\n2SGbcdRtxfqt0+B/i9GanmsPnvXnITtsVHxdeLJvRbF+3vE7hazr/jvXqrf1gTvdAAAAUImhGwAA\nACoxdAMAAEAlhm4AAACoxCK1NXj41LeG7PqDTy6endyz0YCuddSYRTHb54KW6xeuXhWye1aOD9ns\n6w4v1k/+dawH1g/9qb/dLUBbTb/hyJDdv1frP4NLzp70L+V/cWLM75xTfg6uarpD9rGbPx6yzcYu\nK9Z/Y+YPQrZN700hG9M1slhfUlqa9vW/+0jx7KTzbgmZpWmsL5asGhOyDRf2tqGTf9ezxYRifs37\nTiuksdd3/2BOsX7rf43PdSJ3ugEAAKASQzcAAABUYugGAACASgzdAAAAUIlFamswc5dHQzbQhWmf\nX7xLMZ8w4rmQnX3bu0LW/XR5AcP078b6vKovnpv/f1+jQwBYv8w8YWHIPnrFe4pnv/emnwz69d+y\nwZrufzQhuW/Pb7X8uL05LmJb1cSlad99fsti/Vd/uV/Ipp/8csg2/ZUlSvDHzvvZu0M27sn4nF6X\n5v+v8nN9m94RIbtnZVx7OO3ylwa9p/WJO90AAABQiaEbAAAAKjF0AwAAQCWGbgAAAKjE0A0AAACV\n2F6+Bk/+76khO/aoPYpnr/319iGb8NP4V/vGGxcU6+9e0h+yGemO1+jw38VqgNfvi0/t2u4WYJ3p\nW/p0yJYfPKF4dodv/lXIPrPDDSH7z6MXDbivVl38wvhi/rX57w3ZmItGhWz0jQ8U67d+5s6Qeb8B\nrZn5xftCtuTQ7dbZ9bu33SZkP9rzjOLZ/hS/HelTnz8uZBvf5FuQBsKdbgAAAKjE0A0AAACVGLoB\nAACgEkM3AAAAVGKR2hpsev4tIXv4/PLZGen2lh6zbyANAVTQVfjs9cvjy4sc9/rg0SHb8PJbB70n\naLfVTy4u5lMOifkVE3YI2WWbvmPQe1qTrmeeL+YTH5/fUr33JjD4+p59LmSbnhdni1qWvHOzkE3r\njQvT1mTjRS8NZjskd7oBAACgGkM3AAAAVGLoBgAAgEoM3QAAAFCJoRsAAAAqsb0cYD3Wn/pbPvvU\nW+KPjCmXD2Y3MPSsXrwkhqWsktafwcBwlHd+c8iendm0XH/6MzND1v3Q4yHzTQcD4043AAAAVGLo\nBgAAgEoM3QAAAFCJoRsAAAAqsUgNYD2x0a0Ph+wbT28Xstlj56+LdgCAAep+ZnnItrm4O2QHXvzx\ncv3zL4es73cPDLwx/oA73QAAAFCJoRsAAAAqMXQDAABAJYZuAAAAqMQiNYD1RN/Sp0N23i/fHrLZ\ne1ukBgBDweoFC2O4oPX6vkHrhD/FnW4AAACoxNANAAAAlRi6AQAAoBJDNwAAAFRi6AYAAIBKbC8H\nWI9NP+KXITsw7Vo8OyXdXLsdAIBhx51uAAAAqMTQDQAAAJUYugEAAKASQzcAAABUkpumaXcPAAAA\nMCy50w0AAACVGLoBAACgEkM3AAAAVGLoBgAAgEoM3QAAAFCJoRsAAAAqMXQDAABAJYZuAAAAqMTQ\nDQAAAJUYugEAAKASQzcAAABUYugGAACASgzdAAAAUImhGwAAACoxdAMAAEAlhm4AAACoxNANAAAA\nlRi6AQAAoBJDNwAAAFRi6AYAAIBKDN0AAABQiaEbAAAAKjF0AwAAQCX/D0tOGoVM37zVAAAAAElF\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb601916a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nURx3KU3lLue1WuztlSw3ZZI7fd2HtA103hnt7tj83pTr4vdPKe+3bo5arU3rhUa9Vs946r3u/PdO\nf0ay04ZulWxpt7YGm5llh7VIlhT0uS52d7vzvXWtnIZR1gpEUcbrMjQMkSy/S1t+My16raQ9rveY\nZmb5Tr02PRnnG1TMzEKrc7026bHmPTbHnf+1H9wu2QVDdW0smr9edCWa37NBr+G2H/nP1ZD8Zg3T\n7i2cY7FeoJayY7S9e+I/rJKs+0pt9DczG3JIm7pz7RPcseO/95xk3lU55l79ZiMzs+JR57p23tsv\nm3mOO39os16ruQtmS9aa8e/Nuop6XecadGx2X5c7v+B8K0PirAmv/weJqrVW8Ek3AAAAAACRsOkG\nAAAAACASNt0AAAAAAETCphsAAAAAgEgGb5GaV1aS0x+3cOBAyQ+ZVnaSlFPa5HGKQbIjtBhl1/u1\n6MDM7EihSbLvvPBWyWY+vsedXyjqc+UVw5Sl0ucEOM7Srl9Xg64V+S3b3KEz/0zzvctmumN7dwzT\n7B0LJWvZeNA/r/2HJGro1iK3g2tGudMPTdYyxaZwTLKdf+S/NUxf2SNZkteyl1RllKYBVVPG6zLT\n4hWSalY4qNdq6mM26Xu4mVlmpJYkHpvbIdnWC/2S1PmLtDSpvUnP6xPD/XIlrzQtY07pXMrnNy/0\n6/n37dVzbb3zcXd+GSsLUDsp5X7FQ1r6lZuk12/Lj54o+VB5r/QxjTO2cPiIP9YrHXPWRa841cws\nN7xVDz9F7xd6E//81/WPl6ztDi1YzHe+6M4fKPikGwAAAACASNh0AwAAAAAQCZtuAAAAAAAiYdMN\nAAAAAEAkg7dIzSkQWL71ackWdcz3pztFSuYUjqUdq5xilpDVEob8vMmSnTt5ozv/4b1zJBu5olkH\n7u4s+ZzK4RXUlVWuBFRBcqzf/w/O9btix7OSXX7xe9zpOy4eLdmX53zXHbtk6wcla7rvScnSaghz\n06dKdniKrh/nXviCO3/VnumS/fHIpyQL07vd+ZlhWmziFrNQpIhBynu9r9j+jGSXn3qR/wD9WlyY\npNwveKVpmUd1bZr8qH+ov7x+lWSTcvpZS2NocOd7pWlF03PdXTjqzn+y+1TJwjE9fvbk2e780Ktr\ndn5TpzsWqJm097uMXj9Ln7hfssvmaPGxmVmxW4vI3MIzs9L3HEmc9+ZklJY/f+q0/ydZ1lk/zMw+\n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\nPfP8ktVZk3ZLdnqb3odcNvw+d/5pQ/TmYlRW7028wiczs6U9oyXb/EV9rqcs7XHnF/YflCw0+kVO\niVdaBRxvaSWhJdM3wUyzXlNmZpdOfrNkSbE75WH1fTw0DtH5Z5/mTm9o1oLGW7foWnPgMS1nMzOb\ndvtOyZa+8LA71uP+rF7za5oyCurcsVXCJ90AAAAAAETCphsAAAAAgEjYdAMAAAAAEAmbbgAAAAAA\nIjnBitT0j+eTXr98Y/jtWoS26n2z3LFf2XSnZNvyWpawqW+cO7+4u0myYTt0fkO330LUdP+Tkk2b\n/mHJxj7uF0A09jgFc0+9oJk726uFMMudNDFlNHACSyv2KFWJBSDZtlFuPvSnulZs/JqWJT16dLo7\nP3NMz7/Y1VXSOQH1qm+Uvq4/NVULv8zM7t/xjGTHEi0xyjiFa2ZmnQu1ZPCDLy53x/b+iRas/frQ\nBsk+37HUnT+zobT1otc5fzOz9046V7Lbtj0m2Z1dWiZrZva1e98u2bT/9quSzilN0k8bI2rIawNN\neV8OOd1iJXkdW+zxiwTLKQfLNOk+IunRtaZ/pJarmZlZp57rzjYtLRy/2b/+8ps6Jbtslq4fZRUe\nVlp4VsPCtDR80g0AAAAAQCRsugEAAAAAiIRNNwAAAAAAkbDpBgAAAAAgEjbdAAAAAABEMqDay1fs\nXC3ZoomnV/SYxZQmvVz7BMn6Hhzrjr12/U2SJTltzZtxl3+suZ3bJFv6pLaRLl642J1vUyZJNPsG\nbSkOjdpEaOa3CeamT9Vz+uVP3fnev0H+ld3uWKAaYqwVZSmjpTzT3CxZ0n/MHZvkNV+x41nJ0taK\nDd9dINlNU3TcnKe1NdnMbPLNqyTLtLRI9sBL2nBsVuV/A6BEL37iW5It+lv/tfrl/drU/fAb9Rr4\n2Y6n3Ple+3lP0u+OPVTUVvGrRvxasoNFv5F4d0Hf22c0DJPsuV6/kfi857X9+H1Oo3nh/De586f9\nmzaVZ1pbJXtg/aPufHe9qMNGYpw4vPfb1Pe1UNrnmiHnv98mBb3+Q0PKti2jx8qMGyNZts+/1jPO\nErT57f8i2eIvvsudX3Ta04vd3Tow7d7Iua699vflW592p7v/BmUcq1r4pBsAAAAAgEjYdAMAAAAA\nEAmbbgAAAAAAImHTDQAAAABAJAOqSC1GCY9XimBmtuikMyRr/9Z+d2zI6u8uil4RUuIXGOT/g/P7\nnXE7dvr/ocSyhqTfL2sJDVrCkt/UKVlZz79TAANUS6VrhVc6uHzzEyUfKzu6LeWBnWu1bYRmO1OK\nCPtLK2grjB3pHz5f2lqxq3e4m+/8zBzJJv3rS5JRmIaBpJzXq1eatvFLZ0nWGLTM0cxs2tIPSTZk\nuF+yOrylV7JCUdeAQ5tGufOtDEm8AAAD7klEQVRz3Tp2/fXfluyvF7/HnW87vHXosCTZXzznz3eK\njIpdXZKxXmCgKOe1mhzTe+7sKL1Wl635uTv/0ikLJQvZrDvWu2cpDtOS1gOz/dLFhsOl3Vskh/X6\nNTNLCv7+pmQZ/bm8Irmy1oo6LF3kk24AAAAAACJh0w0AAAAAQCRsugEAAAAAiIRNNwAAAAAAkbDp\nBgAAAAAgkpBUsd3t4szV9VclN5A47X5mZiu2PyNZNdtAV+zUltZqHn9l8e7SahcxYAz0tSI3dbKb\n5zu3ljTfayI1MzOnzTPbPkGypKfHnb7shYcl867V854/6s5/cNc8yRov6ZQs7fy9BnjWClSqmutF\nyOmXviRF5/BlfIOH95hmZkm+xO82cVrCX3sA57y8RvG3+Nfgyjv/j2TcW2Agq/m9hXcfX8ZakR07\n1s0Le/aUNH/jP+o3LZiZjdVthI1Yr03lmcP+vcGyR34smXutlrNWlWGgrBV80g0AAAAAQCRsugEA\nAAAAiIRNNwAAAAAAkbDpBgAAAAAgEr+9A/UppWyhmmUB9Xh8oN6UWpiWJunrK/1Y27ZLlpsyyR1b\n6rXaMWSff15fHydZplXHFru0gKWc4wP1quRys2o+ZjklRM7YzKPPukNrfb3W+vjAcVdGaZpXOlZq\nYVqajof84ze/vF+PtWGjZElLizu/5Gs1ba2qsGBuoKwVfNINAAAAAEAkbLoBAAAAAIiETTcAAAAA\nAJGw6QYAAAAAIBKK1I6DFTtXSzZQ/qi/XnnPqRnPKwa2KGuFU0CS37LNHRoaGyXzSttum9vhzm+y\nJyUr/qHzi4y1AoMV9xbHH+sFBgyv9LCpyR36wKbHJfNe043LnvKPNXy4Zk6RW7G7259fqXIK5qok\nxlrBJ90AAAAAAETCphsAAAAAgEjYdAMAAAAAEAmbbgAAAAAAImHTDQAAAABAJLSXHwe0Xh5/PKcY\njKK8rsto/fSaygc61goMVry2jz+eUwxkxd5eN6/0dV04fLii+YNRjLWCT7oBAAAAAIiETTcAAAAA\nAJGw6QYAAAAAIBI23QAAAAAARBKSJKn1OQAAAAAAMCjxSTcAAAAAAJGw6QYAAAAAIBI23QAAAAAA\nRMKmGwAAAACASNh0AwAAAAAQCZtuAAAAAAAiYdMNAAAAAEAkbLoBAAAAAIiETTcAAAAAAJGw6QYA\nAAAAIBI23QAAAAAARMKmGwAAAACASNh0AwAAAAAQCZtuAAAAAAAiYdMNAAAAAEAkbLoBAAAAAIiE\nTTcAAAAAAJGw6QYAAAAAIBI23QAAAAAARMKmGwAAAACASNh0AwAAAAAQCZtuAAAAAAAiYdMNAAAA\nAEAk/x9MNSzUqDfh8AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efbacf62358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Stacked AutoEncoder in Keras"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.reset_default_graph()\n",
    "keras.backend.clear_session()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 512)               401920    \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 256)               131328    \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 256)               65792     \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 512)               131584    \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 784)               402192    \n",
      "=================================================================\n",
      "Total params: 1,132,816\n",
      "Trainable params: 1,132,816\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "Epoch 1/20\n",
      "55000/55000 [==============================] - 2s 37us/step - loss: 0.0194 - acc: 0.0121\n",
      "Epoch 2/20\n",
      "55000/55000 [==============================] - 2s 36us/step - loss: 0.0087 - acc: 0.0135\n",
      "Epoch 3/20\n",
      "55000/55000 [==============================] - 2s 42us/step - loss: 0.0071 - acc: 0.0139\n",
      "Epoch 4/20\n",
      "55000/55000 [==============================] - 2s 41us/step - loss: 0.0063 - acc: 0.0143\n",
      "Epoch 5/20\n",
      "55000/55000 [==============================] - 2s 44us/step - loss: 0.0059 - acc: 0.0147\n",
      "Epoch 6/20\n",
      "55000/55000 [==============================] - 2s 36us/step - loss: 0.0056 - acc: 0.0153\n",
      "Epoch 7/20\n",
      "55000/55000 [==============================] - 2s 40us/step - loss: 0.0054 - acc: 0.0151\n",
      "Epoch 8/20\n",
      "55000/55000 [==============================] - 2s 40us/step - loss: 0.0053 - acc: 0.0151\n",
      "Epoch 9/20\n",
      "55000/55000 [==============================] - 2s 38us/step - loss: 0.0051 - acc: 0.0151\n",
      "Epoch 10/20\n",
      "55000/55000 [==============================] - 2s 39us/step - loss: 0.0050 - acc: 0.0159\n",
      "Epoch 11/20\n",
      "55000/55000 [==============================] - 2s 36us/step - loss: 0.0049 - acc: 0.0165\n",
      "Epoch 12/20\n",
      "55000/55000 [==============================] - 3s 46us/step - loss: 0.0049 - acc: 0.0158\n",
      "Epoch 13/20\n",
      "55000/55000 [==============================] - 2s 44us/step - loss: 0.0048 - acc: 0.0164\n",
      "Epoch 14/20\n",
      "55000/55000 [==============================] - 2s 38us/step - loss: 0.0047 - acc: 0.0160\n",
      "Epoch 15/20\n",
      "55000/55000 [==============================] - 2s 37us/step - loss: 0.0047 - acc: 0.0162\n",
      "Epoch 16/20\n",
      "55000/55000 [==============================] - 2s 33us/step - loss: 0.0046 - acc: 0.0160\n",
      "Epoch 17/20\n",
      "55000/55000 [==============================] - 2s 33us/step - loss: 0.0046 - acc: 0.0165\n",
      "Epoch 18/20\n",
      "55000/55000 [==============================] - 3s 50us/step - loss: 0.0046 - acc: 0.0159\n",
      "Epoch 19/20\n",
      "55000/55000 [==============================] - 2s 40us/step - loss: 0.0046 - acc: 0.0167\n",
      "Epoch 20/20\n",
      "55000/55000 [==============================] - 2s 36us/step - loss: 0.0045 - acc: 0.0168\n"
     ]
    }
   ],
   "source": [
    "import keras\n",
    "from keras.layers import Dense\n",
    "from keras.models import Sequential\n",
    "\n",
    "# hyperparameters\n",
    "learning_rate = 0.001\n",
    "n_epochs = 20\n",
    "batch_size = 100\n",
    "n_batches = int(mnist.train.num_examples/batch_size)\n",
    "\n",
    "# number of pixels in the MNIST image as number of inputs\n",
    "n_inputs = 784\n",
    "n_outputs = n_inputs\n",
    "\n",
    "# number of hidden layers\n",
    "n_layers = 2\n",
    "# neurons in each hidden layer\n",
    "n_neurons = [512,256]\n",
    "# add decoder layers:\n",
    "n_neurons.extend(list(reversed(n_neurons)))\n",
    "n_layers = n_layers * 2\n",
    "\n",
    "model = Sequential()\n",
    "\n",
    "# add input to first layer\n",
    "model.add(Dense(units=n_neurons[0], activation='relu', \n",
    "                input_shape=(n_inputs,)))\n",
    "\n",
    "for i in range(1,n_layers):\n",
    "    model.add(Dense(units=n_neurons[i], activation='relu'))\n",
    "    \n",
    "# add last layer as output layer\n",
    "model.add(Dense(units=n_outputs, activation='linear'))\n",
    "model.summary()\n",
    "\n",
    "model.compile(loss='mse',\n",
    "              optimizer=keras.optimizers.Adam(lr=learning_rate),\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "model.fit(X_train, X_train,\n",
    "                    batch_size=batch_size,\n",
    "                    epochs=n_epochs)\n",
    "\n",
    "Y_train_pred = model.predict(train_images)\n",
    "Y_test_pred = model.predict(test_images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efbacfd8ac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efbacfd8c18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(train_images.reshape(-1,pixel_size,pixel_size),train_labels)\n",
    "display_images(Y_train_pred.reshape(-1,pixel_size,pixel_size),train_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAADFCAYAAABJo5HtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFTVJREFUeJzt3Xm0nWWVJ+D3vQMJSBJMIIQQkhhI\nSBAobIYSygkBBUSUtgDRRqpb0AYFghq7urDFXqWtArVQ5sGUYmGXQsmMiAh2VQnYDBIFwhyCYUjQ\nMIUAGe79+g+oLnW/kRPufXPOvXmetfIHP959vk1Y59yzz7fuPrlpmgQAAAAMvq52NwAAAADDlaEb\nAAAAKjF0AwAAQCWGbgAAAKjE0A0AAACVGLoBAACgEkM3AAAAVGLo7iA55xE557k550dzzstyzvNy\nzvu1uy+g8+ScZ+Wcb8w5P5dzfijnfFC7ewI6T875opzzkznn53POD+Scj2x3T0DnyTm/8Ed/+nLO\nZ7S7r+HC0N1ZelJKi1JK70wpjUkpfSGldHHOeWobewI6TM65J6V0RUrp6pTS2JTSJ1JKF+WcZ7S1\nMaATfTWlNLVpmtEppQNTSl/OOe/c5p6ADtM0zcb/9ielNCGl9FJK6ZI2tzVsGLo7SNM0y5um+VLT\nNAubpulvmubqlNIjKSU/HIHfNzOlNDGldFrTNH1N09yYUroppXR4e9sCOk3TNPc0TbPi3/7x1T9b\nt7EloPN9KKX0VErpX9vdyHBh6O5gOefNU0ozUkr3tLsXoOPllNL27W4C6Dw557Nzzi+mlO5LKT2Z\nUvpRm1sCOtsRKaXvNk3TtLuR4cLQ3aFyzr0ppe+llC5smua+dvcDdJT70yufQM/JOffmnN+TXvm1\nlI3a2xbQiZqmOSalNCql9PaU0qUppRV/ugJYX+Wcp6RX3lNc2O5ehhNDdwfKOXellP4hpbQypfTp\nNrcDdJimaVallD6YUnpfSmlxSumzKaWLU0qPtbMvoHO9+qsoP08pTUopHd3ufoCOdXhK6edN0zzS\n7kaGk552N8AfyjnnlNLclNLmKaX9X31zDfAHmqb5dXrlk+iUUko555uTT6WB19aT/E43sGYfSyl9\nrd1NDDfudHeec1JKs1JK72+a5qV2NwN0ppzzjjnnkTnnjXLOn0spbZFS+k6b2wI6SM55fM75wznn\njXPO3Tnn96aUDksp3dDu3oDOk3PeI6W0ZbK1fNAZujvIq79D8cmU0k4ppcW/9z15H21za0DnOTy9\nshDpqZTSXimlfX5vQzFASq9sKj86vfKrJ8+klE5NKc1umubKtnYFdKojUkqXNk2zrN2NDDfZUjoA\nAACow51uAAAAqMTQDQAAAJUYugEAAKASQzcAAABUYugGAACASnrW5cX26TrYqnQG3fX9l+R298Dg\n8lpBDV4rhievF9Tg9WL48VpBDa2+VrjTDQAAAJUYugEAAKASQzcAAABUYugGAACASgzdAAAAUImh\nGwAAACoxdAMAAEAlhm4AAACoxNANAAAAlRi6AQAAoBJDNwAAAFRi6AYAAIBKDN0AAABQiaEbAAAA\nKjF0AwAAQCU97W5gffLQN95azM9//wUt1f/w6V2L+a3nviVk4+be0npjAAAAVOFONwAAAFRi6AYA\nAIBKDN0AAABQiaEbAAAAKrFIrZLu6dNCduUHTyuendk7oqXHfNfEm4v5L06M+X9621Ehm3xpd7F+\n5FW3tnR9AGCQdZV/NndtPz2Gjzweov5ly4r13bNifd+9D65db+tAz7Sp5X+xYmWIVj/+RN1mACpx\npxsAAAAqMXQDAABAJYZuAAAAqMTQDQAAAJUYugEAAKAS28sr6XtwQcjmvPfw4tlFHxgfsukHxA2j\nfzv5ymL9W0fE7ecPveeCkO096aBifbqqHAMAg2fJsXuEbMJBjxbPXrnt90J2whOx/t7nJhfr5874\ndsiOeOAjr9Xi/7fo9i1DNv72/pbrS57YM2bf3//M4tkzF+8VsiW7D+jyAG3jTjcAAABUYugGAACA\nSgzdAAAAUImhGwAAACqxSG0d6rv/oWI+8eSYLz85npuz3RHF+hWnvxyyK2ZeHLKfbndZsf5thx0T\nstH/+IviWQDg9Vk5JmZXbVteklpy2sSbYzixfLYrbRSyH88qvw8omlXIyvtgB6h8/+f4CT8N2d+k\n3Wo0AOu17k3iC9PqWVMH/TrLt9qwmPe8GBc0jli6Ip67d2Gxvu/Z5wbU17riTjcAAABUYugGAACA\nSgzdAAAAUImhGwAAACqxSG0I6Zv/QDHv2TtmJ92xR8hOnnB7sX7E830D6gtozbOH7x6yfT7785Cd\ntNm8AV3nE4veVcwXfDluRhp59a0DuhbQuslfjz+Hd+w5tnj25YmrQnbh3heE7NRF+xbr77pncqzf\n9/zXavFPGp3jcqM3bzCwt5LP9cdlsCmldNTXPxeyzdItA7oWrCsPfmfnkO0x4+Eq1+rKcRFZf9P6\nfdXpb3gqZH+9aVxk2LWGe7X9KV5/oErX2utTRxfPbnj50Hgf4043AAAAVGLoBgAAgEoM3QAAAFCJ\noRsAAAAqMXQDAABAJbaXDwPdm4wJ2bYbPRjP5fJnLM9O6w3Z5gNvC9YL3ePGhuzeU6YVz/7z3qeE\nbIvuDUN2/nNTi/X3LN8yZO8YfX+s3+r/FOvvPOPGkH2u51MhGyqbQGGoaVatDNnkL93ccv1X0k6F\ndHHx7IxCXq5v3cp9dw3ZT+aeO6DHfOfZc4r5pHNb/3uBTnP/PvGbAmps+U4ppdtXdIesby3uq27S\nFb9B4O6Vsf7lJhfr+1KcI0qm97xQzMd2j2ipfqhzpxsAAAAqMXQDAABAJYZuAAAAqMTQDQAAAJVY\npDYM9L9pUsg+PvpnIdvtzkOL9VvMnRcfc+BtwbDy8gG7FfP9vxqfa5eNvW4NjxKXhex01rEhm3rh\nwmL16sefCNmj094ZshOPnVCsn3/IGSE79bSzQvb5VccU60dcc1sxB4afFfvFpWkHnnLDgB5z2x/G\n15aZF8RlkCml1DegK0F77f6lT6+za4274JYB1fdsFeeI5qWXQtb3u6UtP2bXyJEhG3djzFJKae6U\n60N27YujQjbqjvgeKKWUVrfcVXu50w0AAACVGLoBAACgEkM3AAAAVGLoBgAAgEoM3QAAAFCJ7eXD\nwIMfixv+Sl5eVf7f3f/ii4PZDgxLU068r5jPHju/5cfY+fTjQzbp6zeHbG02ca5esLCQlreXl/zZ\nBjGbdOKDxbO/vablhwWGiFV771zMzznnmyHbpjd+A8OaHPrwviHb9sT4etm3bFnLjwlDxUA3iq9L\nqxc9NuiPuex9fxayy6ec2XL9Zy4/ImRbLxo6f6cl7nQDAABAJYZuAAAAqMTQDQAAAJUYugEAAKAS\ni9SGkKVH7l7Mb/nLU+PZ/niu58ebDHZLMCx1jxsbsu9OubF49nd9K0O25+lzime3PCUuTRuoUq+H\n7XlT8WxXi5+zfnvKDcX8gFReuAR0nq6RI0P2zId2Ctn5X/lGsX5tlqaVLD35TSEbuezWAT0mMDQ8\nfkBcCdvqe5CUUtp6ztBemlbiTjcAAABUYugGAACASgzdAAAAUImhGwAAACqxSG0IeeNhjxXzcV0b\nhuzN3/p0yKacO/hLnGA4WnDczJCtaq4vnv3i4r1CNrHCwrSUUurZcmK81qXPhWzHjX5TrN/x5r8K\n2bw9/j5kP3tp47VvDmiLFw7+82K++MC45PG+d59VONk7yB294tpzzwzZLufODtlWX/beBIayJ+bs\nEbLb9j4lZP1pg2L9XncdGrI3pAUDb6zDuNMNAAAAlRi6AQAAoBJDNwAAAFRi6AYAAIBKDN0AAABQ\nie3lHaq0CfCuWWcXz5702x1CtvUFj4Zs9cDbgvXCmIeals/u+IZFIZu/3/7FsyOuvS1k3aNHh+yR\n2dsX64//8BUh6yt8dvp3f/uRYv3mvyu8CsSXmnT0DR8r1s9IsX9g3Vl65O4hO+/EbxbP7rRBfIvX\nP+gdrVlv7g7ZTZ88NWS7bXdMsX7aR+YNek/A65d7y9vH9zj4zpCN6opnL3thfLF+9PHxfUzfWvY2\nFLjTDQAAAJUYugEAAKASQzcAAABUYugGAACASixS6wDPH/bWkP3LcXHZSF8zslh/3SlvD9mYx34x\n8MZgPbXJP9wSspM+85bi2ZPG3xGy/c87rXh23oq4ROQNXStC9raRNxTrv/XctJBd88HdQrbJA7H/\nlFJasd+uxfyP/cUODxbz37ZUDQyGRV8oLFQ9+szCyfJbuRVNXJx45fLNQ3bitYcW66dcvSpkvT+N\nr3d5l/Lix3TyMyG6ZturQjZ5/NPleqCjLDvoPxTz07c8o6X6r8zfr5hPvH/+6+5pKHGnGwAAACox\ndAMAAEAlhm4AAACoxNANAAAAlViktg51jx5dzD950qUhW970h2z3uZ8q1k+95Jcha9ayN+BPm7f3\npsV85lfi8/Kbe13U8uOecNchIeu5bpPi2c3OKS1Ie7jla5V0FT57/faU8iK3A9LOA7oW0Lq+EfEn\n+V0r43KzhavHFev/2w8OD9nUL8TXkG3SwBavNrffXcwffjIun+zfNv439Td5QNcH1o0Zn7mn5bN3\nr4zP9a2OWlI82/e6O3rFk5+NSyfH7ft48ez7t7grZNdtX57PBps73QAAAFCJoRsAAAAqMXQDAABA\nJYZuAAAAqMTQDQAAAJXYXl5Jz9TJIeu9cEXx7OGjFodsm2tnh2zGF0ubi20qh3Whb+nTxXzGf701\nZGelGS0/7hbp3tfd02DoT/GbEtake5s3hazvoUcGsx3gVVP/R/yZ/99/cETIul58uVy/oPyeYbDl\nXbYv5te/7YxCumFIfnP3FsX6bdKjA2kLhoSeKVsV81UTx4bsoQ/H509KKaU3rhzMltbousl/X8xX\nNfEe7o4bxHNX/OonLV+rN3cXrrOmPed3hOTaF0cVT57zlx8opOvmfZg73QAAAFCJoRsAAAAqMXQD\nAABAJYZuAAAAqMQitUrGf/+ZkH1rq38unr3khXEhm/W1pSFb0/oAgHVhweFx4dGUkyxSY2ib+5uf\nh+yKF2YVz159yF+ErP/u+wa9pzUpXav1VYgDl0eMCNkDxxU2JqWUJvXEpU8rmlUh633e/R/WD0/M\n2SNkJx75j8WzB238VMuP21W4h7o2S1JbVVqYNhjX+tCDB4ZsyQvlRWglvRfFpXNvvOmx4tn+Re1b\nXuuVDgAAACoxdAMAAEAlhm4AAACoxNANAAAAlVikNgie/i+7h+xHW53Vcv3f/PjQkE1/6BcD6glg\nsE07PS5xsuCRoW6L7o1C9okxC4tnR/3TSyGb+7n/GLKN5z1erF/9WDnvRN2zpofsvr+Oy43u3+uC\nlh9zh6uOC9mMk25eu8ZgCFhyXFya9sNPnxKyeSsmFuvf/P1jW77WJvfmkPWNjNnEK35TrG9G9Ibs\nkKtvCtlHRz1ZrP/Ckt1Cds9hW4csv/hysb5vcVwaN3ZV+VqtWj2g6jrc6QYAAIBKDN0AAABQiaEb\nAAAAKjF0AwAAQCWGbgAAAKjE9vK1sHh23ESYUkqXnBC3Eaa0YcuP+/l9rgrZyd/ZNx5cVv7fdekB\np7d8rZKPnn9CyCZ91TZRWB90rcVnr31Ln67YCXS+w0Ytidl554TsmMfeUay//cL4PmLChb8qnu1f\nvnwtu3ttL30gbhne6PjyRvXZky8P2Z4bxu3Dly0fW6z/n3cdELLtvhY3EnfilmEYqNnH/FPI3vuT\n2SGbcdRtxfqt0+B/i9GanmsPnvXnITtsVHxdeLJvRbF+3vE7hazr/jvXqrf1gTvdAAAAUImhGwAA\nACoxdAMAAEAlhm4AAACoxCK1NXj41LeG7PqDTy6endyz0YCuddSYRTHb54KW6xeuXhWye1aOD9ns\n6w4v1k/+dawH1g/9qb/dLUBbTb/hyJDdv1frP4NLzp70L+V/cWLM75xTfg6uarpD9rGbPx6yzcYu\nK9Z/Y+YPQrZN700hG9M1slhfUlqa9vW/+0jx7KTzbgmZpWmsL5asGhOyDRf2tqGTf9ezxYRifs37\nTiuksdd3/2BOsX7rf43PdSJ3ugEAAKASQzcAAABUYugGAACASgzdAAAAUIlFamswc5dHQzbQhWmf\nX7xLMZ8w4rmQnX3bu0LW/XR5AcP078b6vKovnpv/f1+jQwBYv8w8YWHIPnrFe4pnv/emnwz69d+y\nwZrufzQhuW/Pb7X8uL05LmJb1cSlad99fsti/Vd/uV/Ipp/8csg2/ZUlSvDHzvvZu0M27sn4nF6X\n5v+v8nN9m94RIbtnZVx7OO3ylwa9p/WJO90AAABQiaEbAAAAKjF0AwAAQCWGbgAAAKjE0A0AAACV\n2F6+Bk/+76khO/aoPYpnr/319iGb8NP4V/vGGxcU6+9e0h+yGemO1+jw38VqgNfvi0/t2u4WYJ3p\nW/p0yJYfPKF4dodv/lXIPrPDDSH7z6MXDbivVl38wvhi/rX57w3ZmItGhWz0jQ8U67d+5s6Qeb8B\nrZn5xftCtuTQ7dbZ9bu33SZkP9rzjOLZ/hS/HelTnz8uZBvf5FuQBsKdbgAAAKjE0A0AAACVGLoB\nAACgEkM3AAAAVGKR2hpsev4tIXv4/PLZGen2lh6zbyANAVTQVfjs9cvjy4sc9/rg0SHb8PJbB70n\naLfVTy4u5lMOifkVE3YI2WWbvmPQe1qTrmeeL+YTH5/fUr33JjD4+p59LmSbnhdni1qWvHOzkE3r\njQvT1mTjRS8NZjskd7oBAACgGkM3AAAAVGLoBgAAgEoM3QAAAFCJoRsAAAAqsb0cYD3Wn/pbPvvU\nW+KPjCmXD2Y3MPSsXrwkhqWsktafwcBwlHd+c8iendm0XH/6MzND1v3Q4yHzTQcD4043AAAAVGLo\nBgAAgEoM3QAAAFCJoRsAAAAqsUgNYD2x0a0Ph+wbT28Xstlj56+LdgCAAep+ZnnItrm4O2QHXvzx\ncv3zL4es73cPDLwx/oA73QAAAFCJoRsAAAAqMXQDAABAJYZuAAAAqMQiNYD1RN/Sp0N23i/fHrLZ\ne1ukBgBDweoFC2O4oPX6vkHrhD/FnW4AAACoxNANAAAAlRi6AQAAoBJDNwAAAFRi6AYAAIBKbC8H\nWI9NP+KXITsw7Vo8OyXdXLsdAIBhx51uAAAAqMTQDQAAAJUYugEAAKASQzcAAABUkpumaXcPAAAA\nMCy50w0AAACVGLoBAACgEkM3AAAAVGLoBgAAgEoM3QAAAFCJoRsAAAAqMXQDAABAJYZuAAAAqMTQ\nDQAAAJUYugEAAKASQzcAAABUYugGAACASgzdAAAAUImhGwAAACoxdAMAAEAlhm4AAACoxNANAAAA\nlRi6AQAAoBJDNwAAAFRi6AYAAIBKDN0AAABQiaEbAAAAKjF0AwAAQCX/D0tOGoVM37zVAAAAAElF\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb5801aba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efbacfd8cf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Add noise to test images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_noise(X):\n",
    "    return X + 0.5 * np.random.randn(X.shape[0],X.shape[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_images_noisy = add_noise(test_images)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Denoising AutoEncoder in TensorFlow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.reset_default_graph()\n",
    "keras.backend.clear_session()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hyperparameters\n",
    "learning_rate = 0.001\n",
    "n_epochs = 20\n",
    "batch_size = 100\n",
    "n_batches = int(mnist.train.num_examples/batch_size)\n",
    "\n",
    "# number of pixels in the MNIST image as number of inputs\n",
    "n_inputs = 784\n",
    "n_outputs = n_inputs\n",
    "\n",
    "# input images\n",
    "x = tf.placeholder(dtype=tf.float32, name=\"x\", shape=[None, n_inputs]) \n",
    "\n",
    "# output images\n",
    "y = tf.placeholder(dtype=tf.float32, name=\"y\", shape=[None, n_outputs]) \n",
    "\n",
    "# number of hidden layers\n",
    "n_layers = 2\n",
    "# neurons in each hidden layer\n",
    "n_neurons = [512,256]\n",
    "\n",
    "# add decoder layers:\n",
    "n_neurons.extend(list(reversed(n_neurons)))\n",
    "n_layers = n_layers * 2\n",
    "\n",
    "w=[]\n",
    "b=[]\n",
    "\n",
    "for i in range(n_layers):\n",
    "    # weights\n",
    "    w.append(tf.Variable(tf.random_normal([n_inputs if i==0 else n_neurons[i-1],\n",
    "                                           n_neurons[i]]),\n",
    "                         name=\"w_{0:04d}\".format(i) \n",
    "                        )\n",
    "            ) \n",
    "    # biases\n",
    "    b.append(tf.Variable(tf.zeros([n_neurons[i]]),\n",
    "                         name=\"b_{0:04d}\".format(i) \n",
    "                        )\n",
    "            )                   \n",
    "w.append(tf.Variable(tf.random_normal([n_neurons[n_layers-1] if n_layers > 0 else n_inputs,\n",
    "                                       n_outputs]),\n",
    "                     name=\"w_out\"\n",
    "                    )\n",
    "        )\n",
    "b.append(tf.Variable(tf.zeros([n_outputs]),name=\"b_out\"))\n",
    "\n",
    "# x is input layer\n",
    "layer = x\n",
    "\n",
    "# add hidden layers\n",
    "for i in range(n_layers):\n",
    "    layer = tf.nn.sigmoid(tf.matmul(layer, w[i]) + b[i]) \n",
    "\n",
    "# add output layer\n",
    "layer = tf.nn.sigmoid(tf.matmul(layer, w[n_layers]) + b[n_layers])\n",
    "    \n",
    "model = layer\n",
    "\n",
    "mse=tf.losses.mean_squared_error\n",
    "loss = mse(predictions=model, labels=y)\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
    "optimizer = optimizer.minimize(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0000   loss = 0.147567\n",
      "epoch: 0009   loss = 0.097514\n",
      "epoch: 0019   loss = 0.087566\n",
      "epoch: 0029   loss = 0.080724\n",
      "epoch: 0039   loss = 0.077055\n",
      "epoch: 0049   loss = 0.075069\n",
      "epoch: 0059   loss = 0.073064\n",
      "epoch: 0069   loss = 0.072101\n",
      "epoch: 0079   loss = 0.071337\n",
      "epoch: 0089   loss = 0.070251\n",
      "epoch: 0099   loss = 0.069607\n"
     ]
    }
   ],
   "source": [
    "n_epochs = 100\n",
    "\n",
    "with tf.Session() as tfs:\n",
    "    tf.global_variables_initializer().run()\n",
    "    for epoch in range(n_epochs):\n",
    "        epoch_loss = 0.0\n",
    "        for batch in range(n_batches):\n",
    "            X_batch, _ = mnist.train.next_batch(batch_size)\n",
    "            X_batch_noisy = add_noise(X_batch)\n",
    "            feed_dict={x: X_batch_noisy, y: X_batch}\n",
    "            _,batch_loss = tfs.run([optimizer,loss], feed_dict=feed_dict)\n",
    "            epoch_loss += batch_loss \n",
    "        if (epoch%10==9) or (epoch==0):\n",
    "            average_loss = epoch_loss / n_batches\n",
    "            print('epoch: {0:04d}   loss = {1:0.6f}'\n",
    "                  .format(epoch,average_loss))\n",
    "            \n",
    "    Y_test_pred1 = tfs.run(model, feed_dict={x: test_images})\n",
    "    Y_test_pred2 = tfs.run(model, feed_dict={x: test_images_noisy})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb5808e550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nmT30zCrJsvaK/MgR+vxHteAxBj7pBgAAAAAgEoZuAAAAAAAiYegGAAAAACAShm4AAAAAACJh6AYA\nAAAAIJKQDmAb9JW566tbPe00+oaC0+RpZmmvtndnNRT+1aE5kr215TnJPjnjUnf94QfPlOzQtlGS\nDX/Faf42s9SJu1r1W90zvtddX9yv34ORL+txrT/d7a63Lm1vLx864h6aG65NyeVDh/3HrdDqZHn/\nKpVRc6q+V/RTtKZ0r5U86O9Oc3X+vrblW7rXPP3Gr0m2p+R/+2/58Mclq/ux3r2gVu8ywF4xNPVl\nv8ifNVuy8subJZv1dIO7/g1NuyS7d9tlkh0+pncVMTOb5TQKZ+0Xyy7VO5uk7dponvUeevDDes1R\nvO6AZNdOed5d/7bhz0rWmtdvtfYmv+axkxMlu/3e90g26Wf+3RLyz+iFiNfebmb+3tjPfYj9YugZ\n0GsL5249uaZGycKUCe7y8oubJMvaK5Ze8TZ93JJ2gpe273TXf33nGsnG5/UuSs92+5/Vfu79fyhZ\n/okNkqUlfw7JmsXkuKJ/0620R2e2LLlZMyTz3gP6otK9gk+6AQAAAACIhKEbAAAAAIBIGLoBAAAA\nAIiEoRsAAAAAgEj8v0gfokJdnWS5kSPcYzsWzZDs8udmusfeedb3JZvSh+/sp+asluybb50uWVaB\nwqf2LpDsZKJf67CcXzTwtxOfkcwrfDp84yXu+tFr90rmFdGZmaUdnW4ODCX9Lkzri0TLUh7e6pSb\nmdl5T+oe1umsz3ulRGb2b9/8hmTe1xoKGWUnpZKbAwOl0sKcLQv9wq5bt+v6S87dKtnjJ7Wwzcxs\n07rxkl3xvJYgmZm136Xv45dM1CK0LQvd5fbDz/6NZDdPf6Nkn93jNKea2RHdGqzLKSfbVNKCVDOz\ndzQfl+zuv/y5ZPnhw9315W4tac1Uo+WNwOt5hV9h/yH32MJELVi7es7l7rGhsV2y8pRxeuB2/7wa\nnPf8ayfrxpI1hxTW676YeHOAUy5nZrZyx1OSedcWR9+l846Z2Yh/fFLDjD0h2eqXyQ0EPukGAAAA\nACAShm4AAAAAACJh6AYAAAAAIBKGbgAAAAAAIql6kVrWH+VXXESUUfgT8vrH+vnWsZJ1nD/JXb/7\nzfr7iKVjd7nHtoReyU4kiWR/tu1pd/2TnVq4Mm+dPv+VL17jrr9srJa4rHhlrmTNw/xSkvn3akHa\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb5808e390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred1.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nzd/mAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef77448c5f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n1SVZdsxonb7rLXd+dq7eMSl09UiWvKV3LzAzS3qcsfm8O9ad772uQXS9UepawSfdAAAAAABEwqYb\nAAAAAIBI2HQDAAAAABAJm24AAAAAACLJlfsAKpb3Bf4+lKuF6irJso1Hu2MLb7br2Pw4yYZv8ctO\nkjotULio+VnJ1jTpY5qZPTDxVMmaep0ChLTX34eyg9a2lZItmvDekucDlSZktSzFLQUxc8+V3Lix\nOmy4X6xSWLtessxxczTb65cNdc3SNaD6GS1NTA4dcucPZNkJawUqUonFiUl3tz/dKVILE3QNMDOz\nNXoeL7rwKck+eNlL7vRvTT1Fspu3PC5Z0fz39ionb3SKF8dk/M9vPjHiZcnu/sAJkh181b82ql+b\nUujoYL1ApcmO0JLkwh4tIksrBzz0kfmS7Zvib9vGXaNlirtuGiVZXVWjO7/m/HWSrf3pSTpuc7M7\nPzin6oj1Go58zX+tuXYtU8xv264DiynXVn1QzrWCT7oBAAAAAIiETTcAAAAAAJGw6QYAAAAAIBI2\n3QAAAAAAREKRWkZLkMzMLHFaAVIKg0r9Ur43zsxs2UmL9am275SstscvUtu0TktYpszV+dX1Tjma\nmT25WV/rfasfkYxSEgxq/TzXsyNHuNNDfb1k+W1t7tiS14rnW935tx3wjmGDJHfvOtGd/9RGLSGp\net/xkk29VktVzMySzk7J7n9dC1xYKzDo9aE41ZO2XtjRYyQqrHndHVrqevF3bX7h2LY1WyT7o/V/\nINmrm8a786tq9ZrhplN+Ktlx1f61yc6Cfq7zq+Pukuz9+cvc+V5JZX//XYDDLVNb6+Yd758lWd0v\nnpbs1Bf986eruEKylf5be8paUdo4M7MNmw5ItimvBY078v66trdQJ1lvolvMquDvQ65dc5ZkLy+4\nR7Il07T42cys6BVXRip57Q8+6QYAAAAAIBI23QAAAAAARMKmGwAAAACASNh0AwAAAAAQCZtuAAAA\nAAAiObLay73WS6+52MxtvQs1Ne7QJTNPlyw7WscumX2mO//+Ncsl8xpKsxm/tTPTM07HBn1dL3dO\ndOcPX6+NxIsnz3dG9rjz+4JWY5RN2rnuyNRpE2dxqn/+JC+skmztP5zijp3+L9q82fLADsluO6CN\n5GZmf9iwTzLvnPq9Vf78Ty94VLKbpur69XTuWHf+tO9om2msc5q1AmWV1nzrXEe41wZFf35h7XrJ\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb5808e160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images_noisy.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred2.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Denoising AutoEncoder in Keras"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_noisy = add_noise(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.reset_default_graph()\n",
    "keras.backend.clear_session()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 512)               401920    \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 256)               131328    \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 256)               65792     \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 512)               131584    \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 784)               402192    \n",
      "=================================================================\n",
      "Total params: 1,132,816\n",
      "Trainable params: 1,132,816\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "import keras\n",
    "from keras.layers import Dense\n",
    "from keras.models import Sequential\n",
    "\n",
    "# hyperparameters\n",
    "learning_rate = 0.001\n",
    "batch_size = 100\n",
    "n_batches = int(mnist.train.num_examples/batch_size)\n",
    "\n",
    "# number of pixels in the MNIST image as number of inputs\n",
    "n_inputs = 784\n",
    "n_outputs = n_inputs\n",
    "\n",
    "# number of hidden layers\n",
    "n_layers = 2\n",
    "# neurons in each hidden layer\n",
    "n_neurons = [512,256]\n",
    "\n",
    "# add decoder layers:\n",
    "n_neurons.extend(list(reversed(n_neurons)))\n",
    "\n",
    "n_layers = n_layers * 2\n",
    "\n",
    "model = Sequential()\n",
    "\n",
    "# add input to first layer\n",
    "model.add(Dense(units=n_neurons[0], activation='relu', \n",
    "                input_shape=(n_inputs,)))\n",
    "\n",
    "for i in range(1,n_layers):\n",
    "    model.add(Dense(units=n_neurons[i], activation='relu'))\n",
    "    \n",
    "# add last layer to output layer\n",
    "model.add(Dense(units=n_outputs, activation='linear'))\n",
    "model.summary()\n",
    "\n",
    "model.compile(loss='mse',\n",
    "              optimizer=keras.optimizers.Adam(lr=learning_rate)\n",
    "             )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_epochs=100\n",
    "\n",
    "model.fit(x=X_train_noisy, y=X_train,\n",
    "                batch_size=batch_size,\n",
    "                epochs=n_epochs,\n",
    "                verbose=0)\n",
    "\n",
    "Y_test_pred1 = model.predict(test_images)\n",
    "Y_test_pred2 = model.predict(test_images_noisy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef774433438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef774433470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred1.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nzd/mAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb6008fb00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb61a98128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images_noisy.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred2.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Variational Autoencoder in TensorFlow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.reset_default_graph()\n",
    "keras.backend.clear_session()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "# hyperparameters\n",
    "learning_rate = 0.001\n",
    "n_epochs = 20\n",
    "batch_size = 100\n",
    "n_batches = int(mnist.train.num_examples/batch_size)\n",
    "\n",
    "# number of pixels in the MNIST image as number of inputs\n",
    "n_inputs = 784\n",
    "n_outputs = n_inputs\n",
    "\n",
    "\n",
    "# define parameter ditionary\n",
    "params={}\n",
    "\n",
    "# number of hidden layers\n",
    "n_layers = 2\n",
    "# neurons in each hidden layer\n",
    "n_neurons = [512,256]  \n",
    "\n",
    "n_neurons_z = 128 # the dimensions of latent variables\n",
    "\n",
    "activation = tf.nn.tanh\n",
    "\n",
    "# input images\n",
    "x = tf.placeholder(dtype=tf.float32, name='x', shape=[None, n_inputs]) \n",
    "# output images\n",
    "y = tf.placeholder(dtype=tf.float32, name='y', shape=[None, n_outputs]) \n",
    "\n",
    "# x is input layer\n",
    "layer = x\n",
    "\n",
    "# add recognition / inference / probablistic encoder network weights, biases and layers\n",
    "\n",
    "for i in range(0,n_layers):\n",
    "    name='w_e_{0:04d}'.format(i)\n",
    "    params[name] = tf.get_variable(name=name, \n",
    "                                   shape=[n_inputs if i==0 else n_neurons[i-1],\n",
    "                                          n_neurons[i]], \n",
    "                                   initializer=tf.glorot_uniform_initializer()\n",
    "                                  )\n",
    "    name='b_e_{0:04d}'.format(i)\n",
    "    params[name] = tf.Variable(tf.zeros([n_neurons[i]]),\n",
    "                               name=name\n",
    "                              )\n",
    "\n",
    "    layer = activation(tf.matmul(layer,\n",
    "                                 params['w_e_{0:04d}'.format(i)]\n",
    "                                ) + params['b_e_{0:04d}'.format(i)]\n",
    "                      )\n",
    "\n",
    "name='w_e_z_mean'\n",
    "params[name] = tf.get_variable(name=name,\n",
    "                               shape=[n_neurons[n_layers-1], n_neurons_z],\n",
    "                               initializer=tf.glorot_uniform_initializer()\n",
    "                              )\n",
    "name='b_e_z_mean'\n",
    "params[name] = tf.Variable(tf.zeros([n_neurons_z]),\n",
    "                           name=name\n",
    "                          )\n",
    "z_mean = tf.matmul(layer, params['w_e_z_mean']) + params['b_e_z_mean']\n",
    "\n",
    "name='w_e_z_log_var'\n",
    "params[name] = tf.get_variable(name=name,\n",
    "                               shape=[n_neurons[n_layers-1], n_neurons_z],\n",
    "                               initializer=tf.glorot_uniform_initializer()\n",
    "                              )\n",
    "name='b_e_z_log_var'\n",
    "params[name] = tf.Variable(tf.zeros([n_neurons_z]),\n",
    "                     name='b_e_z_log_var'\n",
    "                    )\n",
    "\n",
    "z_log_var = tf.matmul(layer, params['w_e_z_log_var']) + params['b_e_z_log_var']\n",
    "\n",
    "# noise distribution\n",
    "epsilon = tf.random_normal(tf.shape(z_log_var), \n",
    "                           mean=0, \n",
    "                           stddev=1.0,\n",
    "                           dtype=tf.float32, \n",
    "                           name='epsilon'\n",
    "                          )\n",
    "# posterior distribution\n",
    "z = z_mean + tf.exp(z_log_var * 0.5) * epsilon     \n",
    "\n",
    "\n",
    "# add generator / probablistic decoder network weights, biases and layers\n",
    "layer = z\n",
    "\n",
    "for i in range(n_layers-1,-1,-1):\n",
    "    name='w_d_{0:04d}'.format(i)\n",
    "    params[name] = tf.get_variable(name=name, \n",
    "                                   shape=[n_neurons_z if i==n_layers-1 else n_neurons[i+1],\n",
    "                                          n_neurons[i]], \n",
    "                                   initializer=tf.glorot_uniform_initializer()\n",
    "                                  )\n",
    "    name='b_d_{0:04d}'.format(i)\n",
    "    params[name] = tf.Variable(tf.zeros([n_neurons[i]]),\n",
    "                         name=name \n",
    "                        )\n",
    "    layer = activation(tf.matmul(layer, params['w_d_{0:04d}'.format(i)]) + \n",
    "                          params['b_d_{0:04d}'.format(i)])    \n",
    "    \n",
    "    \n",
    "name='w_d_z_mean'\n",
    "params[name] = tf.get_variable(name=name,\n",
    "                               shape=[n_neurons[0],n_outputs],\n",
    "                               initializer=tf.glorot_uniform_initializer()\n",
    "                              )\n",
    "name='b_d_z_mean'\n",
    "params[name] = tf.Variable(tf.zeros([n_outputs]),\n",
    "                     name=name\n",
    "                    )\n",
    "name='w_d_z_log_var'    \n",
    "params[name] = tf.Variable(tf.random_normal([n_neurons[0],\n",
    "                                             n_outputs]),\n",
    "                           name=name\n",
    "                          )\n",
    "name='b_d_z_log_var'\n",
    "params[name] = tf.Variable(tf.zeros([n_outputs]),\n",
    "                           name=name\n",
    "                          )\n",
    "\n",
    "layer = tf.nn.sigmoid(tf.matmul(layer, params['w_d_z_mean']) + \n",
    "                          params['b_d_z_mean'])\n",
    "                        \n",
    "model = layer\n",
    "\n",
    "# loss function\n",
    "rec_loss = -tf.reduce_sum(y \n",
    "                          * tf.log(1e-10 + model) \n",
    "                          + (1-y) \n",
    "                          * tf.log(1e-10 + 1 - model),\n",
    "                          1\n",
    "                         )\n",
    "reg_loss = -0.5 * tf.reduce_sum(1 \n",
    "                                + z_log_var \n",
    "                                - tf.square(z_mean) \n",
    "                                - tf.exp(z_log_var), \n",
    "                                1\n",
    "                               )            \n",
    "loss = tf.reduce_mean(rec_loss+reg_loss)\n",
    "# optimizer function\n",
    "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
    "optimizer = optimizer.minimize(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0000   loss = 178.974197\n",
      "epoch: 0009   loss = 106.536299\n",
      "epoch: 0019   loss = 102.442220\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as tfs:\n",
    "    tf.global_variables_initializer().run()\n",
    "    for epoch in range(n_epochs):\n",
    "        epoch_loss = 0.0\n",
    "        for batch in range(n_batches):\n",
    "            X_batch, _ = mnist.train.next_batch(batch_size)\n",
    "            feed_dict={x: X_batch,y: X_batch}\n",
    "            _,batch_loss = tfs.run([optimizer,loss], feed_dict=feed_dict)\n",
    "            epoch_loss += batch_loss \n",
    "        if (epoch%10==9) or (epoch==0):\n",
    "            average_loss = epoch_loss / n_batches\n",
    "            print('epoch: {0:04d}   loss = {1:0.6f}'\n",
    "                  .format(epoch,average_loss))\n",
    "\n",
    "    # predict images using autoencoder model trained            \n",
    "    Y_test_pred1 = tfs.run(model, feed_dict={x: test_images})\n",
    "    Y_test_pred2 = tfs.run(model, feed_dict={x: test_images_noisy})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7efb60046dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef7742ce358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred1.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nzd/mAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef77429aa90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef77422a780>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images_noisy.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred2.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Variational Autoencoder in Keras"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.reset_default_graph()\n",
    "keras.backend.clear_session()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input (InputLayer)              (None, 784)          0                                            \n",
      "__________________________________________________________________________________________________\n",
      "enc_0 (Dense)                   (None, 512)          401920      input[0][0]                      \n",
      "__________________________________________________________________________________________________\n",
      "enc_1 (Dense)                   (None, 256)          131328      enc_0[0][0]                      \n",
      "__________________________________________________________________________________________________\n",
      "z_mean (Dense)                  (None, 128)          32896       enc_1[0][0]                      \n",
      "__________________________________________________________________________________________________\n",
      "z_log_v (Dense)                 (None, 128)          32896       enc_1[0][0]                      \n",
      "__________________________________________________________________________________________________\n",
      "z (Lambda)                      (None, 128)          0           z_mean[0][0]                     \n",
      "                                                                 z_log_v[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "dec_1 (Dense)                   (None, 256)          33024       z[0][0]                          \n",
      "__________________________________________________________________________________________________\n",
      "dec_0 (Dense)                   (None, 512)          131584      dec_1[0][0]                      \n",
      "__________________________________________________________________________________________________\n",
      "output (Dense)                  (None, 784)          402192      dec_0[0][0]                      \n",
      "==================================================================================================\n",
      "Total params: 1,165,840\n",
      "Trainable params: 1,165,840\n",
      "Non-trainable params: 0\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "import keras\n",
    "from keras.layers import Lambda, Dense, Input, Layer\n",
    "from keras.models import Model\n",
    "from keras import backend as K\n",
    "    \n",
    "# hyperparameters\n",
    "learning_rate = 0.001\n",
    "batch_size = 100\n",
    "n_batches = int(mnist.train.num_examples/batch_size)\n",
    "\n",
    "# number of pixels in the MNIST image as number of inputs\n",
    "n_inputs = 784\n",
    "n_outputs = n_inputs\n",
    "\n",
    "# number of hidden layers\n",
    "n_layers = 2\n",
    "# neurons in each hidden layer\n",
    "n_neurons = [512,256]\n",
    "# the dimensions of latent variables\n",
    "n_neurons_z = 128 \n",
    "\n",
    "x = Input(shape=(n_inputs,), name='input')\n",
    "\n",
    "layer = x\n",
    "\n",
    "# build encoder\n",
    "for i in range(n_layers):\n",
    "    layer = Dense(units=n_neurons[i], activation='relu',name='enc_{0}'.format(i))(layer)\n",
    "\n",
    "z_mean = Dense(units=n_neurons_z,name='z_mean')(layer)\n",
    "z_log_var = Dense(units=n_neurons_z,name='z_log_v')(layer)\n",
    "\n",
    "\n",
    "# noise distribution\n",
    "epsilon = K.random_normal(shape=K.shape(z_log_var), \n",
    "                           mean=0, \n",
    "                           stddev=1.0\n",
    "                         )\n",
    "\n",
    "# posterior distribution\n",
    "#z = Lambda(z_mean + K.exp(z_log_var * 0.5) * epsilon,\n",
    "z = Lambda(lambda zargs: zargs[0] + K.exp(zargs[1] * 0.5) * epsilon,\n",
    "           name='z'\n",
    "          )([z_mean,z_log_var])\n",
    "\n",
    "# add generator / probablistic decoder network layers\n",
    "layer = z\n",
    "\n",
    "for i in range(n_layers-1,-1,-1):\n",
    "    layer = Dense(units=n_neurons[i], activation='relu',name='dec_{0}'.format(i))(layer)\n",
    "\n",
    "y_hat = Dense(units=n_outputs, activation='sigmoid',name='output')(layer)\n",
    "\n",
    "#y_hat = VAELossLayer()([x,layer])\n",
    "                        \n",
    "model = Model(x,y_hat)\n",
    "model.summary()\n",
    "\n",
    "def vae_loss(y, y_hat):\n",
    "        rec_loss = -K.sum(y * K.log(1e-10 + y_hat) + (1-y) * K.log(1e-10 + 1 - y_hat), \n",
    "                          axis=-1)\n",
    "        reg_loss = -0.5 * K.sum(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=-1) \n",
    "         \n",
    "        loss = K.mean(rec_loss+reg_loss)\n",
    "        return loss\n",
    "\n",
    "model.compile(loss=vae_loss,\n",
    "              optimizer=keras.optimizers.Adam(lr=learning_rate)\n",
    "             )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_epochs=50\n",
    "\n",
    "model.fit(x=X_train_noisy, y=X_train,\n",
    "                batch_size=batch_size,\n",
    "                epochs=n_epochs,\n",
    "                verbose=0)\n",
    "\n",
    "Y_test_pred1 = model.predict(test_images)\n",
    "Y_test_pred2 = model.predict(test_images_noisy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef774449ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef775da6358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred1.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nzd/mAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef7744f79b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAADFCAYAAABJo5HtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAHJhJREFUeJzt3XmQZWd5H+D3u73O0rOPRjPSaAaN\n0AbaACE2ATLGBFvEi8BLHIIXDGViyoQstisu24nt2BWbABUHcIyIAePEEHCMwZHZsREgY7QYSYzW\nkdBo9q1n6b3vyR/CKeP3u2bG0lHf6XmeKv2hX31f39NTfc89b5/q3ylN0wQAAADwxOss9AEAAADA\nYmXoBgAAgJYYugEAAKAlhm4AAABoiaEbAAAAWmLoBgAAgJYYugEAAKAlhu4+UkoZKaXcWEp5uJRy\nrJRyeynl5Qt9XED/KaVcUkr5TCllvJRyfynl+xf6mID+U0r5g1LK7lLK0VLKvaWU1y70MQH9p5Ry\n/O/9N19K+a8LfVyLhaG7vwxGxCMR8aKIWBkRvxgRHyylbF3AYwL6TCllMCL+JCI+FhFrIuJ1EfEH\npZQLF/TAgH70GxGxtWmaFRHxTyPi10opz1zgYwL6TNM0y//2v4g4OyImI+JDC3xYi4ahu480TXOi\naZpfaZrmoaZpuk3TfCwidkSED0fg77o4IjZFxFubpplvmuYzEXFzRLx6YQ8L6DdN09zVNM303/7v\nN//btoCHBPS/GyJiX0T85UIfyGJh6O5jpZQNEXFhRNy10McC9L0SEU9f6IMA+k8p5R2llImI2B4R\nuyPizxb4kID+9pqIeF/TNM1CH8hiYejuU6WUoYj4QES8t2ma7Qt9PEBfuSce+w30vy2lDJVSvise\n+7OUpQt7WEA/aprmDRExFhHXRsRHImL6H94BnKlKKVvisWuK9y70sSwmhu4+VErpRMT7I2ImIn5m\ngQ8H6DNN08xGxPdFxPdExJ6I+NcR8cGI2LmQxwX0r2/+KcoXIuLciPjphT4eoG+9OiK+0DTNjoU+\nkMVkcKEPgG9VSikRcWNEbIiI7/7mxTXAt2ia5m/isd9ER0REKeWL4bfSwLc3GP6mG+jtX0TEby70\nQSw27nT3n3dGxCUR8YqmaSYX+mCA/lRKubyUMlpKWVpK+TcRsTEifn+BDwvoI6WUs0opP1xKWV5K\nGSilvCwifiQiPr3Qxwb0n1LK8yLinNBa/oQzdPeRb/4Nxesj4sqI2PN3npP3owt8aED/eXU8Voi0\nLyJeEhEv/TsNxQARjzWV/3Q89qcnhyPityPiTU3TfHRBjwroV6+JiI80TXNsoQ9ksSlK6QAAAKAd\n7nQDAABASwzdAAAA0BJDNwAAALTE0A0AAAAtMXQDAABASwafzBd7aedVqtJ5wn2y+6Gy0MfAE8u5\ngjY4VyxOzhe0wfli8XGuoA0ne65wpxsAAABaYugGAACAlhi6AQAAoCWGbgAAAGiJoRsAAABaYugG\nAACAlhi6AQAAoCWGbgAAAGiJoRsAAABaYugGAACAlhi6AQAAoCWGbgAAAGiJoRsAAABaYugGAACA\nlhi6AQAAoCWDC30AREQpJ7dscKiej47ksNvN0eRU/Qt350/q9QGABVS7XmiaJ/84ADgl7nQDAABA\nSwzdAAAA0BJDNwAAALTE0A0AAAAtUaT2BOiMjqasDA/nhRvPqn+B+VxkVuZyNnPumur2XS9cmrLh\naw6l7PjXV1f3P/U9+/Ih3fdgXqisBQC+rTJUuQaIiDKUL7vKsmUn/4WbXJLa87O5M3By+3u91PRM\nDivXK83sXH1/Za3iVuBM5U43AAAAtMTQDQAAAC0xdAMAAEBLDN0AAADQEkM3AAAAtER7eS+V1s8y\nUGkCjYjO6lUpa6am8/4Tk/XXGh5K0czmtSk7cNmS6vazrns0Za/Z/KWU3bTu6dX9R9+9MoeaygHg\n2yslRwP1exqdlStSNr8pf95HRMwvzQ3oE2dXsrPq1yZz+cEmMVcpSm/y4T+Wd/J1wJL9efHowXoj\n+sjRnC/bfiC/zq691f3diYnKQbk2AU5P7nQDAABASwzdAAAA0BJDNwAAALTE0A0AAAAtUaRWKUCJ\niCidnDezM9W1c7v3nNxrHTnS4xjy7z4GHtmVso37zqtuv+8Fq1O26SmHU3b5WC5ci4i4eape0Ab8\n45TB+qm1jIykrDO2PC8czesiIpqlo5UvWilxOnqivn/8aMq607n0sZmdq+6P7nw9hzNZ5TO8DOfC\ns4iIZiw3mc0vr6+dXJfzqTX5tY5vrpeLrb4sl5bdcN7tKbtm6QPV/Sea/Pp3Tm5OWafUi9QGIh/X\nh3demRe+57Lq/pU33Z2y+aP5HAanjUpJc6fH532tpLnXzBJD+ZqjGa2cVzr1e63zyyrnmg15Njhy\nfv3aZuqs/F4vc/lYV+yon6vWf/LhfEz78vkrmvq5ppmvXJv0YemiO90AAADQEkM3AAAAtMTQDQAA\nAC0xdAMAAEBLFKn1+EP7Zq5HkVALrxVNLgBoaoVFBw5Vt8+Nr0nZ5sHxlH1uvl7WELUCAuBb9CpH\nG1i/LmXHrqmXHu7+wVzGeM3Wh1J2xYr7q/uHSn6v3nEsFxt97vZLqvvX3JbXrng4n+uW3pmLHCMi\n5vfsTVkr50o4zfV6X5RuLgLqTPZam8uNugO5nKg7Ui8XmpvP91VuObw1ZbNNLneKiLj1SD5f7D6x\nImXXnJVLkCIifmLtF1J2/SVfS9mb3/DK6v757Zty+LVj1bX9WJrEGaJHuVln6dKUdZ92fsoOX5jL\nFSMijlyYv+7I5fVC5n950edTtnVof8pWDUxU9589kAtV13Xy+We6qZ+rhiplkoe6ee2uuXpx8zte\nf13KHvrNXLq47DNfr+5vTlS+r8pstdDc6QYAAICWGLoBAACgJYZuAAAAaImhGwAAAFpi6AYAAICW\naC8/nczWWwOH10ylbLTkNtNbDm6t7h+Z6tEGCmeqTm7zHTi30qQbEXf/0lkpe/u1f1Bde+XIvpTN\nVkp3vzy1pbr//qkNKVszdCJlP3D1X1f3P3DJ+pTdvevslJ39v86p7l/++eMpmx8/mhdqEuZM0uTP\n2+5UbgOOiOjs3J2zvUPVtWMP5vbgsbWrU7b+tnr78eB4fh9OzeX28S/G06r7S+WaY/m5ef8nXvTs\n6v4Xv2Z7yq4Z2ZOyf77xy9X9b3nWD6dszd84t7CAKk3lZbD+/u2sX5uyR68dS9mG736kuv8N53wp\nZdcueai6dqyTj+vhuXxcY53Z6v7ad/Bw5QkMfzl5QXX/aMlPZnnOkvxUg6t6PGnhXZs/lbJXvml5\nyspX8/knIqJ7PF+b9CN3ugEAAKAlhm4AAABoiaEbAAAAWmLoBgAAgJYoUutXtbKGsVwqEBHxH678\n05TVqgp2fH1jdf+Fx3OxCZwxKu+1gUoByr3/aU11++df8LaUbRgYqa69Zzafcn/0tp9I2ehHV1b3\nN7nfLSY25uNf8dxc2BYRcdnaXOL0xss/l7L3jV1T3T+6f2vKOn91V8qaSgELLFq14sBmvrq0O1XJ\np3IZakREHM/v7Th0JEWdSolSRES3VO6rVErfeinDuchtaEk+t01tyOsiImZqJ6yKodLj38oVKgup\ncm1QXTZU/0GdX1/5HK+cKg6eWFrdf9PBy1L2h9P1z+aH/jKXr675en6vL9tZP9cMHs9FaJ3xXNLa\nHK0XL5el+Xt4yyt/MGXv/9n/Ut3/tKF8Drlu/T0p++yKZ1b3x87To2DRnW4AAABoiaEbAAAAWmLo\nBgAAgJYYugEAAKAlhm4AAABoiW7IPlUGcuvnnutzO2FExDNGP5SyY92hlJ315XoTYzM3e4pHB4tI\npeF39qmbUvbfnv2B6vZzBnJr59FuvSH0e//sTSm79D8+nLJm6tHq/rJkScrmz85N6w8uW1/dv+q7\nHkjZ1UseTNnSbdPV/W/5jh9I2Zav5WNqjtUbToFTUGtFrzybpOnW75+USnl4GcyXfWXliur+yavy\nNceB1+dG41+55MPV/RcP703Z/kol+dt3vKS6f93tx3PYq1G6+m8Fj0PtZ6ry89fM5ObviIiBnftT\ndu5N+bN19ivLqvsPTZ6Tss4D9WuDLeO35LD2pIIe75PaMw1O/jkHEWX8aMrGHsnHP9Tjq85FfoLB\nzQcvyK9zOL/O6cSdbgAAAGiJoRsAAABaYugGAACAlhi6AQAAoCWK1PpUrTBp9uVHqmuHIhcj/MnR\nq1K29i92VvfPKSDhDFY6uRjlwJW5HG3b0OHq/skmn0Z/ee+Lqmsv/dVvpGz+wMF8TJWyo4iIsmpl\nyg5dUSlB2prLjiIito4eSNmGgcm8cKRe1jKzMp8rSq9iI+Dk9HgPlcFciNpZMprXjS2v7p9+6tkp\n23Vt3n/tK26r7v+RtTem7IKhXGQ02+MS4sG5fL76d3ffkLKBD+cyyIiI5Q/ck7JctwQLq5mv/1TO\n7clFgrE3l6v1uvvZdPPX7def/9rMsu+GXCi7pce1za65XDB3303bUnbe4Vv/EUfXP9zpBgAAgJYY\nugEAAKAlhm4AAABoiaEbAAAAWqJIrU911q1J2X9++keqa8cqRVB/uP1ZKTt//72P/8BgkamVlk2t\ny+tWVt5nERETTa42+dzOC6prNw8fT1lnaS5t6z51c3X/g9fnYqJ4+rEUXbt5R3X/laMPp2zNwEB+\n/aiUq0XEyOH8b9DMzVXXwhntFMrRBjZtqK4df9amlD360txa9pPP+4vq/uuWfyxlTx3K7+3lJR9T\nRMRIyefGWnHkHTPD1f037nlhyqa+mE+u591eL4ltpnK5Uih+pd+cys9k5XrhtNLJ1wsREcdfemnK\nfvkZ/ztl3ehW9//xsctTdt7HD+X9M7Pf7gj7mjvdAAAA0BJDNwAAALTE0A0AAAAtMXQDAABASwzd\nAAAA0BLt5f2g0gZ49y+clbLnjtYbPse7uTlx1ceWpex0b/2DJ0upFHIfq7zPIiJmI7cUv/CcB6tr\nP/3jz6ykual8w/N2Vff/1KYvpezc4YMp2z+3orr/SDc3pQ/ETMp6/TZ2cCJnzUzeD2eUymd4Z3Sk\nvvSs3N79jVedW137tO/bnrL3nPunKdsyWG8PH6m2kudrg14muvm9vX8+nxy3T2+t7j8+l/8Nptfk\n8+js6tHq/iFN5fSbM/xncnDD+mq+8c33p+z6ZTtTdqhbb29/9x/9k5Rt3XVPyspQj7G1m8/BzXyP\npvgex/BkcKcbAAAAWmLoBgAAgJYYugEAAKAlhm4AAABoiSK1PjC4cUPKfvvFf3TS+9918HkpW/fZ\nb6RsbgHLA6Bf1QoGN35xOmXvuuEF1f03rPpKyq5ffXt17XX/7OspWztwPGVLO/n1IyL2z4+l7P17\n8/v/ts9cVN0/9LSjKfvqNb+fsoFak1xELH80n0OaHgVzsChVStPKQM56aQbz2iX76u+hv9m9KWX3\nbVibsonueHX/iaabsvnKvZZbJ7dW93/5yPkpOziVi9hesO6B6v6f2PSFlH3qxYdT9smZZ1T3b7u9\nUkY3VT83LmQ5Epz2Si6EHdyQC53vfdNTqts/e95vpWy6yV/zkycuqO4fPJGz7lPy+a/M1K9NOscm\nU9YcOFRdO3/sWA6fpII8d7oBAACgJYZuAAAAaImhGwAAAFpi6AYAAICWKFJ7MlUKWCIidvz41pRt\nG/rjlH1+MheoRER84neen7J1e796SocGZ6xKAc/wF+9K2S3//urq9v/zmstTdsnZe6trD0zmEqK9\nh1bkhY8sqe5fdU/OzvrkIynbNnlvdf/Bl1+Ysomrc5HcaKVUJSJiyYG8NiplTdC3Kp/DA2vXpKyZ\nmqpuL5X3Rnc6l3s1MzP119+5O0Xrbqq0CEXEmrtykdHblv1IygbH6+Vi5UT+HkqlODJ6lCF2Vy9P\n2cRFK1P23uvXV/f/3gvyCevlq+9I2V9ftbm6Pzbl77/USpDCaYjTRO2ztVeJV21tqd8r7QwP5aXD\nwzlbtrS6f+KK/B68/2X5XPk/vved1f3nDuZzxe65XBK7cyafayMiJs7Jb+ADl+evuXxPvUht6UN5\nfzNXX1srvuy19onmTjcAAAC0xNANAAAALTF0AwAAQEsM3QAAANASQzcAAAC0RHt5Wyqtg7PfeVV1\n6Yde+5aUHevm1sF3PHJddf+GTz+asrm5SkMpcFK6lebikZtura694NZ1KZtet7q6duV4bvMcO/JA\nyno1H9fyuVrzaY8nJQyfyA2fQ5U21Kluvclzfjivrb8S9KfBzZtSNn51zpZ9Y6K+/0ClPfvR3Eje\nzOenIkT0aMmttJ9HRMT+gyka6FTa03u0jz/eSu+BY/nJCsuWjaSsc6D+tIU7Jrek7Omj+WkLh8bz\nUx0iItYezd9/0+t7hX5Te1LCyvyeKivHqtuntuWnAux5dn7/RURMnJfPK2vOPZKyZcP12eCS1Xem\n7LUr81NQnj/S65ySrw32zudG9c/uzU9QiYgYOZD3Lz2Yv6dSP632boCvLV3Ac4g73QAAANASQzcA\nAAC0xNANAAAALTF0AwAAQEsUqT0RKqVpzfOuSNm7fu/t1e0XDuUSkRvHz07Zzj/PpSQREeeduC8f\n0sAp1BtVipSqJTDdXg0GcAbo8fM/t2dvDvfuq3+JUyj7eFx6FCh1K6eFkZLLTnY19e91eLxe8Aan\nsyX788/1Iy+rlxttvDmXnA7v2pOyU3qn9zovVN6Hj7Mbra5H8WJZtTJl+6/K1ytPuTKXo0VELO3k\ngrgHZ85K2cD2epFaM7WrErbxDwBPvDKUR6y5S/N1/EOvqBcR/tT1n0jZi5Ztr65dW3mvTTX5fV3L\nIiLum9mQsktHckHkQBmt7t8xm0tif+kbr0zZoT/PpZUREevuzaVpyx7IRXDl8NHq/u7RXHDZnZys\nrj2V0rUnmjvdAAAA0BJDNwAAALTE0A0AAAAtMXQDAABASxSpnYoeZSNT3/PMlP3S225M2ZbBXMAS\nEfGBY2tT9hsf/76UPeXmier+Zmoqh5Uitc6SegFCWbkif82J/DW7R+sFBs1sLkBQusYZbQGLOv4h\nhy+qnBciF0FOdOsfDWW6UuzUp98r1HRX5tKuHdfnz8Yfe9lnqvvfO3Zdyi68OxeONQcOVvc3c5XP\nyydRGRlJWXPFhdW1d782/7u8+fkfT9lFI5XCs6iXpr31ay9J2ZZP1a9tukfGc+h8w2miVmg8vi2X\npq29ol68umEw//wf69av4++ePidlH9t/ecru3L2xun/V8lw69qZtn07ZnrlcmBYR8TuP5tK08d8+\nL2Wb73y0uj8mKzPHiXxe6E7lwriIHuXPfXiucKcbAAAAWmLoBgAAgJYYugEAAKAlhm4AAABoiaEb\nAAAAWqK9vIcymP9pDr766ura3/rF303Z80dnU/bZyaXV/b/+/h9K2dabc5Pf0P56a2AszW2IneW5\nobXWaB4R0R3La5tHd+eFpcfvaJpuPQf6y5X5CQQDlff1TI/fx3amZlLmOQWcTo5evCplVz7nvpR9\n/4rbqvv3XJebym/Z/oyUrf9ovaW8O37s2x3i/1cG8vuwDOenoJSx5dX948/ZnLJ9r8otxW991ger\n+88fPJSy6SZfR2yfObu6//cfem7K1n04XwcN3P616v7ubD7fwOmi1qi95tbDKbv3Geur+3/ttlel\nbN0d9UbuFQ/k+aDM5WvzzSvrY9/9r8nnxfvP3ZCyPdP1Jx088sHzU7bxr+5PWXe8/hSkk1VtKY84\nbZ6Y5E43AAAAtMTQDQAAAC0xdAMAAEBLDN0AAADQkjO+SK2MjFTz6RdflrKf/4UPVNfWStMOd3MR\n2hv/589U92/7yIEc7juYomYiF6BERDSz9cKWvLBeeFYOVF6rWytrOD2KCoC6JSO5mGi6yeevR2bX\nVveXw4+vBAX60Xeu/XrK1g/UPy9/fsOnU/bLrxtK2WeuvrS6f/hgLiKb3TxdXXvpllxoevnKR1P2\nwrFbqvufPpw/28c6+fWP9Sghuntmdcr2zOUiuV/55A3V/Re9O58vmrtvTZnCNBajZib/XDd3bk/Z\nU3+uPoec9LV9RESnpKiMjeXskvOq21etzfPFnun8Xv/UjnqR2ta/ygWR3UNHUtazCO1kC5mbepHc\n6cKdbgAAAGiJoRsAAABaYugGAACAlhi6AQAAoCWLt0it5FKBTqU0becbn1Hd/vOv/aOUXb8sl5JE\nRBzu5rKE7/jK61J2we9+o7q/Wyky605XilVaKhBo5k6hrAHof6X++9QTk/kcONvkYpNaWVJERAwu\n3o8Mzgyrbs6fwzc++PyUnX/xvur+i4cPp+znNv55yn727E/VX7+TP2/XdYarawcq1zHzleuAbtRL\niKaavH/HbD43/PcD11X3/987n5ayLR/K+y/+Qi6ii4iYP34ihz1K22DROclr9qZ2vX+qOvmzuazM\nRWoPvHJJdfuvX/zRlN02sSVlIzfnrxkR0bnvrpTNz+WS1tO9CO3xcqcbAAAAWmLoBgAAgJYYugEA\nAKAlhm4AAABoiaEbAAAAWrJoq2jLwEAOL9iaop/8sT+r7v/B5bm5dKKpt3y/4aHvTdmWf3U0ZXO7\n9lT3a/MEnlBNvc14+kRuSZ6trD1nKDc0R0R011SaS3dVzrXOafSpud17U7bsneek7PWv+PHq/ksu\n2pmyNSMTKdu6tP60k0uW7ErZ+oF8vRARcaybm4bfv/u5Kbvry+dX96/anrOxR/LTVpY8cKC6/+J9\n+Qt0J6dSNu/9Dk+OyhMNIiI6y5el7OhVG1O27Pzx6v79cytS9sfbr0jZU245Xt3fPTGZwzO8qbzG\nnW4AAABoiaEbAAAAWmLoBgAAgJYYugEAAKAli7dIbTgXBnUqf+j/9i+8tLr/8HNyKcEH7rq6uvai\nn8slJHM7c9mKUgFgQTW5hGWo5N+9jnUqpSgRMX328pQN35M/RpppxUr0qUrp1+gn7kjZpbeuqW5v\nxvK1weGZ/B44dLxSMBgRX51eVTmmevFhzOdj7c7k643zm1z82lPlOqReEQucLpotm1J26JJ8Dnrp\n5vuq+28+si1lS7+Yz3UD91XaGSNifm722x0i4U43AAAAtMbQDQAAAC0xdAMAAEBLDN0AAADQEkM3\nAAAAtGTRtpd3JyZytuPhlF34+pxFRHw5hlK2LW6vrtX8CfSTMlBvTu4M5zbk2SY3J2+fzk2oERHR\nzc3HnSWjKZufmanv9wQH+lAzm39e53bvqS/e3fLBAERElPy0kYG19acqHLwiPxVh00seSdnVy3dU\n9799z3ekbOSIz+snmjvdAAAA0BJDNwAAALTE0A0AAAAtMXQDAABASxZtkRrAGatHkVrZO5Kyr0yv\nTNnnD11Y3X/wsrz/nNsqr1V6/D63yUVuAMDfU/kcbSanqkub3LkWG5eOp+xLRy+o7t+/b0XKtu2c\nzq9zIpdU91QpgjvTy1Td6QYAAICWGLoBAACgJYZuAAAAaImhGwAAAFqiSA1gsenWy0rW3pGLTd60\n5YdSNrV3WXX/xR/fm1/q6PHK69cL08pILmJrpnNZCwCc0Sqfo90TJ6pLV7/3Synb94E84u0frI99\nF87cnsOmm1//DC9Ce7zc6QYAAICWGLoBAACgJYZuAAAAaImhGwAAAFpi6AYAAICWaC8HWGSa2Zlq\nvup9ueF01ftO/uvWO8lPnqZyAGhfMzd3UhlPHne6AQAAoCWGbgAAAGiJoRsAAABaYugGAACAlpSm\naRb6GAAAAGBRcqcbAAAAWmLoBgAAgJYYugEAAKAlhm4AAABoiaEbAAAAWmLoBgAAgJYYugEAAKAl\nhm4AAABoiaEbAAAAWmLoBgAAgJYYugEAAKAlhm4AAABoiaEbAAAAWmLoBgAAgJYYugEAAKAlhm4A\nAABoiaEbAAAAWmLoBgAAgJYYugEAAKAlhm4AAABoiaEbAAAAWmLoBgAAgJYYugEAAKAl/w+cTgD1\nc9rNDQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ef775da6ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_images(test_images_noisy.reshape(-1,pixel_size,pixel_size),test_labels)\n",
    "display_images(Y_test_pred2.reshape(-1,pixel_size,pixel_size),test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "encoder=Model(x,z_mean)\n",
    "decoder_input = Input(shape=(n_neurons_z,))\n",
    "decoder_layer = decoder_input\n",
    "for i in range(n_layers-1,-1,-1):\n",
    "    decoder_layer = model.get_layer('dec_{0}'.format(i))(decoder_layer)\n",
    "\n",
    "y_decoded = model.get_layer('output')(decoder_layer)\n",
    "generator = Model(decoder_input,y_decoded)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "toc_cell": true,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
